@itwin/tree-widget-react 4.0.0-alpha.6 → 4.0.0-alpha.8
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 +22 -1
- package/README.md +2 -1
- package/lib/esm/tree-widget-react/TreeWidget.d.ts +6 -1
- package/lib/esm/tree-widget-react/TreeWidget.js +19 -2
- package/lib/esm/tree-widget-react/TreeWidget.js.map +1 -1
- package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.d.ts +6 -0
- package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.js +22 -23
- package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.js.map +1 -1
- package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js +1 -1
- package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js.map +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/ErrorState.js +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/ErrorState.js.map +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/SearchBox.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/SearchBox.js +4 -4
- package/lib/esm/tree-widget-react/components/tree-header/SearchBox.js.map +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/SelectableTree.css +2 -0
- package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.css +1 -0
- package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.d.ts +12 -4
- package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.js +13 -9
- package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.d.ts +9 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js +53 -7
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +17 -3
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +561 -161
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.d.ts +6 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +46 -117
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.d.ts +30 -15
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +188 -38
- 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/CategoriesTreeNode.d.ts +18 -3
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.js +30 -3
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.d.ts +24 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.js +701 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/FilteredTree.d.ts +39 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/FilteredTree.js +221 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/FilteredTree.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.d.ts +25 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js +133 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseIdsCache.d.ts +8 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseIdsCache.js +48 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseIdsCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.d.ts +5 -17
- package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js +5 -62
- package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js +11 -5
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.js +13 -11
- package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseTelemetryContext.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/UseTelemetryContext.js +2 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseTelemetryContext.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/Utils.d.ts +38 -23
- package/lib/esm/tree-widget-react/components/trees/common/Utils.js +65 -47
- package/lib/esm/tree-widget-react/components/trees/common/Utils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js +4 -4
- package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/Delayed.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/Delayed.js +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/Delayed.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.js +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.css +2 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.d.ts +3 -3
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js +15 -6
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.d.ts +6 -4
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js +20 -25
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js +10 -4
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.js +7 -3
- package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.js +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js +12 -11
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/AlwaysAndNeverDrawnElementInfo.d.ts +44 -0
- package/lib/esm/tree-widget-react/components/trees/{models-tree → common}/internal/AlwaysAndNeverDrawnElementInfo.js +81 -31
- package/lib/esm/tree-widget-react/components/trees/common/internal/AlwaysAndNeverDrawnElementInfo.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/ClassNameDefinitions.d.ts +33 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/ClassNameDefinitions.js +37 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/ClassNameDefinitions.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.d.ts +16 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js +72 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{Rxjs.d.ts → internal/Rxjs.d.ts} +9 -2
- package/lib/esm/tree-widget-react/components/trees/common/{Rxjs.js → internal/Rxjs.js} +9 -2
- package/lib/esm/tree-widget-react/components/trees/common/internal/Rxjs.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{Tooltip.d.ts → internal/Tooltip.d.ts} +4 -8
- package/lib/esm/tree-widget-react/components/trees/common/{Tooltip.js → internal/Tooltip.js} +4 -10
- package/lib/esm/tree-widget-react/components/trees/common/internal/Tooltip.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/Types.d.ts +14 -0
- package/lib/esm/tree-widget-react/components/{tree-header/SearchBox.css → trees/common/internal/Types.js} +2 -4
- package/lib/esm/tree-widget-react/components/trees/common/internal/Types.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseActiveViewport.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{UseHierarchiesLocalization.d.ts → internal/UseHierarchiesLocalization.d.ts} +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{UseHierarchiesLocalization.js → internal/UseHierarchiesLocalization.js} +6 -2
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseHierarchiesLocalization.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{UseHierarchyFiltering.d.ts → internal/UseHierarchyFiltering.d.ts} +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{UseHierarchyFiltering.js → internal/UseHierarchyFiltering.js} +4 -3
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseHierarchyFiltering.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{UseIModelChangeListener.d.ts → internal/UseIModelChangeListener.d.ts} +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/{UseIModelChangeListener.js → internal/UseIModelChangeListener.js} +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelChangeListener.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.d.ts +47 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js +101 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityChangeEventListener.d.ts +20 -0
- package/lib/esm/tree-widget-react/components/trees/{models-tree → common}/internal/VisibilityChangeEventListener.js +17 -9
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityChangeEventListener.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.d.ts +63 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js +210 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js +8 -8
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js +1 -0
- package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.d.ts +4 -2
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js +22 -18
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js +1 -1
- 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/IModelContentTreeDefinition.d.ts +13 -0
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.js +39 -38
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.d.ts +5 -5
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js +25 -24
- 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 +2 -2
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js +15 -11
- 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 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.d.ts +7 -2
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +73 -70
- 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 +36 -202
- 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/internal/FilteredTree.d.ts +7 -9
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/FilteredTree.js +4 -6
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/FilteredTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +4 -5
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +54 -104
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.d.ts +0 -26
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +80 -359
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.d.ts +27 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js +170 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseIdsCache.d.ts +8 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseIdsCache.js +47 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseIdsCache.js.map +1 -0
- package/lib/public/locales/en/TreeWidget.json +13 -59
- package/package.json +19 -20
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.d.ts +0 -37
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js +0 -214
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/ClassNameDefinitions.d.ts +0 -7
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/ClassNameDefinitions.js +0 -11
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/ClassNameDefinitions.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/Rxjs.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/Tooltip.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseActiveViewport.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseFiltering.d.ts +0 -11
- package/lib/esm/tree-widget-react/components/trees/common/UseFiltering.js +0 -24
- package/lib/esm/tree-widget-react/components/trees/common/UseFiltering.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchiesLocalization.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyFiltering.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseIModelChangeListener.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.d.ts +0 -7
- package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.js +0 -21
- package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.d.ts +0 -29
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/VisibilityChangeEventListener.d.ts +0 -12
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/VisibilityChangeEventListener.js.map +0 -1
- /package/lib/esm/tree-widget-react/components/trees/common/{UseActiveViewport.d.ts → internal/UseActiveViewport.d.ts} +0 -0
- /package/lib/esm/tree-widget-react/components/trees/common/{UseActiveViewport.js → internal/UseActiveViewport.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelsTreeDefinition.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.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 { bufferCount, defer, from, lastValueFrom, map, merge, mergeAll, mergeMap, reduce, switchMap } from \"rxjs\";\nimport { IModel } from \"@itwin/core-common\";\nimport {\n createNodesQueryClauseFactory,\n createPredicateBasedHierarchyDefinition,\n NodeSelectClauseColumnNames,\n ProcessedHierarchyNode,\n} from \"@itwin/presentation-hierarchies\";\nimport { createBisInstanceLabelSelectClauseFactory, ECSql } from \"@itwin/presentation-shared\";\nimport { collect } from \"../common/Rxjs.js\";\nimport { FilterLimitExceededError } from \"../common/TreeErrors.js\";\nimport { createIdsSelector, parseIdsSelectorResult } from \"../common/Utils.js\";\nimport { releaseMainThreadOnItemsCount } from \"./Utils.js\";\n\nimport type { Id64String } from \"@itwin/core-bentley\";\nimport type { Observable } from \"rxjs\";\nimport type {\n ECClassHierarchyInspector,\n ECSchemaProvider,\n ECSqlBinding,\n ECSqlQueryDef,\n ECSqlQueryRow,\n IInstanceLabelSelectClauseFactory,\n InstanceKey,\n} from \"@itwin/presentation-shared\";\nimport type {\n ClassGroupingNodeKey,\n createIModelHierarchyProvider,\n DefineHierarchyLevelProps,\n DefineInstanceNodeChildHierarchyLevelProps,\n GroupingHierarchyNode,\n HierarchyDefinition,\n HierarchyLevelDefinition,\n HierarchyNodesDefinition,\n LimitingECSqlQueryExecutor,\n NodesQueryClauseFactory,\n} from \"@itwin/presentation-hierarchies\";\nimport type { ModelsTreeIdsCache } from \"./internal/ModelsTreeIdsCache.js\";\n\n/** @beta */\nexport type ClassGroupingHierarchyNode = GroupingHierarchyNode & { key: ClassGroupingNodeKey };\n\nconst MAX_FILTERING_INSTANCE_KEY_COUNT = 100;\n\n/**\n * Defines hierarchy configuration supported by `ModelsTree`.\n * @beta\n */\nexport interface ModelsTreeHierarchyConfiguration {\n /** Should element nodes be grouped by class. Defaults to `enable`. */\n elementClassGrouping: \"enable\" | \"enableWithCounts\" | \"disable\";\n /** Full class name of a `GeometricElement3d` sub-class that should be used to load element nodes. Defaults to `BisCore.GeometricElement3d` */\n elementClassSpecification: string;\n /** Should models without elements be shown. Defaults to `false` */\n showEmptyModels: boolean;\n}\n\nexport const defaultHierarchyConfiguration: ModelsTreeHierarchyConfiguration = {\n elementClassGrouping: \"enable\",\n elementClassSpecification: \"BisCore.GeometricElement3d\",\n showEmptyModels: false,\n};\n\ninterface ModelsTreeDefinitionProps {\n imodelAccess: ECSchemaProvider & ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n idsCache: ModelsTreeIdsCache;\n hierarchyConfig: ModelsTreeHierarchyConfiguration;\n}\n\n/** @beta */\nexport interface ElementsGroupInfo {\n parent:\n | {\n ids: Id64String[];\n type: \"element\";\n }\n | {\n ids: Id64String[];\n modelIds: Id64String[];\n type: \"category\";\n };\n groupingNode: ClassGroupingHierarchyNode;\n}\n\ninterface ModelsTreeInstanceKeyPathsFromTargetItemsProps {\n imodelAccess: ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n idsCache: ModelsTreeIdsCache;\n targetItems: Array<InstanceKey | ElementsGroupInfo>;\n hierarchyConfig: ModelsTreeHierarchyConfiguration;\n limit?: number | \"unbounded\";\n}\n\ninterface ModelsTreeInstanceKeyPathsFromInstanceLabelProps {\n imodelAccess: ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n idsCache: ModelsTreeIdsCache;\n label: string;\n hierarchyConfig: ModelsTreeHierarchyConfiguration;\n limit?: number | \"unbounded\";\n}\n\nexport type ModelsTreeInstanceKeyPathsProps = ModelsTreeInstanceKeyPathsFromTargetItemsProps | ModelsTreeInstanceKeyPathsFromInstanceLabelProps;\ntype HierarchyProviderProps = Parameters<typeof createIModelHierarchyProvider>[0];\ntype HierarchyFilteringPaths = NonNullable<NonNullable<HierarchyProviderProps[\"filtering\"]>[\"paths\"]>;\ntype HierarchyFilteringPath = HierarchyFilteringPaths[number];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport namespace ModelsTreeInstanceKeyPathsProps {\n export function isLabelProps(props: ModelsTreeInstanceKeyPathsProps): props is ModelsTreeInstanceKeyPathsFromInstanceLabelProps {\n return !!(props as ModelsTreeInstanceKeyPathsFromInstanceLabelProps).label;\n }\n}\n\nexport class ModelsTreeDefinition implements HierarchyDefinition {\n private _impl: HierarchyDefinition;\n private _idsCache: ModelsTreeIdsCache;\n private _hierarchyConfig: ModelsTreeHierarchyConfiguration;\n private _selectQueryFactory: NodesQueryClauseFactory;\n private _nodeLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory;\n private _queryExecutor: LimitingECSqlQueryExecutor;\n private _isSupported?: Promise<boolean>;\n\n public constructor(props: ModelsTreeDefinitionProps) {\n this._impl = createPredicateBasedHierarchyDefinition({\n classHierarchyInspector: props.imodelAccess,\n hierarchy: {\n rootNodes: async (requestProps) => this.createSubjectChildrenQuery({ ...requestProps, parentNodeInstanceIds: [IModel.rootSubjectId] }),\n childNodes: [\n {\n parentInstancesNodePredicate: \"BisCore.Subject\",\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createSubjectChildrenQuery(requestProps),\n },\n {\n parentInstancesNodePredicate: \"BisCore.ISubModeledElement\",\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createISubModeledElementChildrenQuery(requestProps),\n },\n {\n parentInstancesNodePredicate: \"BisCore.GeometricModel3d\",\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createGeometricModel3dChildrenQuery(requestProps),\n },\n {\n parentInstancesNodePredicate: \"BisCore.SpatialCategory\",\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createSpatialCategoryChildrenQuery(requestProps),\n },\n {\n parentInstancesNodePredicate: \"BisCore.GeometricElement3d\",\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createGeometricElement3dChildrenQuery(requestProps),\n },\n ],\n },\n });\n this._idsCache = props.idsCache;\n this._queryExecutor = props.imodelAccess;\n this._hierarchyConfig = props.hierarchyConfig;\n this._nodeLabelSelectClauseFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: props.imodelAccess });\n this._selectQueryFactory = createNodesQueryClauseFactory({\n imodelAccess: props.imodelAccess,\n instanceLabelSelectClauseFactory: this._nodeLabelSelectClauseFactory,\n });\n }\n\n public async postProcessNode(node: ProcessedHierarchyNode): Promise<ProcessedHierarchyNode> {\n if (ProcessedHierarchyNode.isGroupingNode(node)) {\n return {\n ...node,\n label: this._hierarchyConfig.elementClassGrouping === \"enableWithCounts\" ? `${node.label} (${node.children.length})` : node.label,\n extendedData: {\n ...node.extendedData,\n // add `modelId` and `categoryId` from the first grouped element\n ...node.children[0].extendedData,\n // `imageId` is assigned to instance nodes at query time, but grouping ones need to\n // be handled during post-processing\n imageId: \"icon-ec-class\",\n },\n };\n }\n return node;\n }\n\n public async defineHierarchyLevel(props: DefineHierarchyLevelProps) {\n if (this._isSupported === undefined) {\n this._isSupported = this.isSupported();\n }\n\n if ((await this._isSupported) === false) {\n return [];\n }\n\n return this._impl.defineHierarchyLevel(props);\n }\n\n private async createSubjectChildrenQuery({\n parentNodeInstanceIds: subjectIds,\n instanceFilter,\n }: Pick<DefineInstanceNodeChildHierarchyLevelProps, \"parentNodeInstanceIds\" | \"instanceFilter\">): Promise<HierarchyLevelDefinition> {\n const [subjectFilterClauses, modelFilterClauses] = await Promise.all([\n this._selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: \"BisCore.Subject\", alias: \"this\" },\n }),\n this._selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: \"BisCore.GeometricModel3d\", alias: \"this\" },\n }),\n ]);\n const [childSubjectIds, childModelIds] = await Promise.all([\n this._idsCache.getChildSubjectIds(subjectIds),\n this._idsCache.getChildSubjectModelIds(subjectIds),\n ]);\n const defs = new Array<HierarchyNodesDefinition>();\n childSubjectIds.length &&\n defs.push({\n fullClassName: \"BisCore.Subject\",\n query: {\n ecsql: `\n SELECT\n ${await this._selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this._nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: \"BisCore.Subject\",\n }),\n },\n hideIfNoChildren: true,\n hasChildren: { selector: `InVirtualSet(?, this.ECInstanceId)` },\n grouping: { byLabel: { action: \"merge\", groupId: \"subject\" } },\n extendedData: {\n imageId: \"icon-folder\",\n isSubject: true,\n },\n supportsFiltering: true,\n })}\n FROM ${subjectFilterClauses.from} this\n ${subjectFilterClauses.joins}\n WHERE\n this.ECInstanceId IN (${childSubjectIds.map(() => \"?\").join(\",\")})\n ${subjectFilterClauses.where ? `AND ${subjectFilterClauses.where}` : \"\"}\n `,\n bindings: [\n { type: \"idset\", value: await this._idsCache.getParentSubjectIds() },\n ...childSubjectIds.map((id): ECSqlBinding => ({ type: \"id\", value: id })),\n ],\n },\n });\n childModelIds.length &&\n defs.push({\n fullClassName: \"BisCore.GeometricModel3d\",\n query: {\n ecsql: `\n SELECT model.ECInstanceId AS ECInstanceId, model.*\n FROM (\n SELECT\n ${await this._selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"m.ECClassId\" },\n ecInstanceId: { selector: \"m.ECInstanceId\" },\n nodeLabel: {\n selector: await this._nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"partition\",\n className: \"BisCore.InformationPartitionElement\",\n }),\n },\n hideNodeInHierarchy: {\n selector: `\n CASE\n WHEN (\n json_extract([partition].JsonProperties, '$.PhysicalPartition.Model.Content') IS NOT NULL\n OR json_extract([partition].JsonProperties, '$.GraphicalPartition3d.Model.Content') IS NOT NULL\n ) THEN 1\n ELSE 0\n END\n `,\n },\n hasChildren: this._hierarchyConfig.showEmptyModels\n ? {\n selector: `\n IFNULL((\n SELECT 1\n FROM ${this._hierarchyConfig.elementClassSpecification} e\n WHERE e.Model.Id = m.ECInstanceId\n LIMIT 1\n ), 0)\n `,\n }\n : true,\n extendedData: {\n imageId: \"icon-model\",\n isModel: true,\n },\n supportsFiltering: true,\n })}\n FROM Bis.GeometricModel3d m\n JOIN bis.InformationPartitionElement [partition] ON [partition].ECInstanceId = m.ModeledElement.Id\n WHERE\n m.ECInstanceId IN (${childModelIds.map(() => \"?\").join(\",\")})\n ) model\n JOIN ${modelFilterClauses.from} this ON this.ECInstanceId = model.ECInstanceId\n ${modelFilterClauses.joins}\n ${modelFilterClauses.where ? `AND (model.${NodeSelectClauseColumnNames.HideNodeInHierarchy} OR ${modelFilterClauses.where})` : \"\"}\n `,\n bindings: childModelIds.map((id): ECSqlBinding => ({ type: \"id\", value: id })),\n },\n });\n return defs;\n }\n\n private async createISubModeledElementChildrenQuery({\n parentNodeInstanceIds: elementIds,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n // note: we do not apply hierarchy level filtering on this hierarchy level, because it's always\n // hidden - the filter will get applied on the child hierarchy levels\n return [\n {\n fullClassName: \"BisCore.GeometricModel3d\",\n query: {\n ecsql: `\n SELECT\n ${await this._selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: \"\", // doesn't matter - the node is always hidden\n hideNodeInHierarchy: true,\n })}\n FROM BisCore.GeometricModel3d this\n WHERE\n this.ModeledElement.Id IN (${elementIds.map(() => \"?\").join(\",\")})\n AND NOT this.IsPrivate\n AND this.ECInstanceId IN (SELECT Model.Id FROM ${this._hierarchyConfig.elementClassSpecification})\n `,\n bindings: [...elementIds.map((id): ECSqlBinding => ({ type: \"id\", value: id }))],\n },\n },\n ];\n }\n\n private async createGeometricModel3dChildrenQuery({\n parentNodeInstanceIds: modelIds,\n instanceFilter,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this._selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: \"BisCore.SpatialCategory\", alias: \"this\" },\n });\n return [\n {\n fullClassName: \"BisCore.SpatialCategory\",\n query: {\n ecsql: `\n SELECT\n ${await this._selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this._nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: \"BisCore.SpatialCategory\",\n }),\n },\n grouping: { byLabel: { action: \"merge\", groupId: \"category\" } },\n hasChildren: true,\n extendedData: {\n imageId: \"icon-layers\",\n isCategory: true,\n modelIds: { selector: createIdsSelector(modelIds) },\n },\n supportsFiltering: true,\n })}\n FROM ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n EXISTS (\n SELECT 1\n FROM ${this._hierarchyConfig.elementClassSpecification} element\n WHERE\n element.Model.Id IN (${modelIds.map(() => \"?\").join(\",\")})\n AND element.Category.Id = +this.ECInstanceId\n AND element.Parent.Id IS NULL\n )\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n bindings: modelIds.map((id) => ({ type: \"id\", value: id })),\n },\n },\n ];\n }\n\n private async createSpatialCategoryChildrenQuery({\n parentNodeInstanceIds: categoryIds,\n parentNode,\n instanceFilter,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const modelIds = parseIdsSelectorResult(parentNode.extendedData?.modelIds);\n if (modelIds.length === 0) {\n throw new Error(`Invalid category node \"${parentNode.label}\" - missing model information.`);\n }\n const instanceFilterClauses = await this._selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: this._hierarchyConfig.elementClassSpecification, alias: \"this\" },\n });\n return [\n {\n fullClassName: this._hierarchyConfig.elementClassSpecification,\n query: {\n ecsql: `\n SELECT\n ${await this._selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this._nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: this._hierarchyConfig.elementClassSpecification,\n }),\n },\n grouping: {\n byClass: this._hierarchyConfig.elementClassGrouping !== \"disable\",\n },\n hasChildren: {\n selector: `\n IFNULL((\n SELECT 1\n FROM (\n SELECT Parent.Id ParentId FROM ${this._hierarchyConfig.elementClassSpecification}\n UNION ALL\n SELECT ModeledElement.Id ParentId FROM bis.GeometricModel3d\n )\n WHERE ParentId = this.ECInstanceId\n LIMIT 1\n ), 0)\n `,\n },\n extendedData: {\n modelId: { selector: \"IdToHex(this.Model.Id)\" },\n categoryId: { selector: \"IdToHex(this.Category.Id)\" },\n imageId: \"icon-item\",\n },\n supportsFiltering: true,\n })}\n FROM ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n this.Category.Id IN (${categoryIds.map(() => \"?\").join(\",\")})\n AND this.Model.Id IN (${modelIds.map(() => \"?\").join(\",\")})\n AND this.Parent.Id IS NULL\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n bindings: [...categoryIds.map((id) => ({ type: \"id\", value: id })), ...modelIds.map((id) => ({ type: \"id\", value: id }))] as ECSqlBinding[],\n },\n },\n ];\n }\n\n private async createGeometricElement3dChildrenQuery({\n parentNodeInstanceIds: elementIds,\n instanceFilter,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this._selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: this._hierarchyConfig.elementClassSpecification, alias: \"this\" },\n });\n return [\n {\n fullClassName: this._hierarchyConfig.elementClassSpecification,\n query: {\n ecsql: `\n SELECT\n ${await this._selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this._nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: this._hierarchyConfig.elementClassSpecification,\n }),\n },\n grouping: {\n byClass: this._hierarchyConfig.elementClassGrouping !== \"disable\",\n },\n hasChildren: {\n selector: `\n IFNULL((\n SELECT 1\n FROM (\n SELECT Parent.Id ParentId FROM ${this._hierarchyConfig.elementClassSpecification}\n UNION ALL\n SELECT ModeledElement.Id ParentId FROM bis.GeometricModel3d\n )\n WHERE ParentId = this.ECInstanceId\n LIMIT 1\n ), 0)\n `,\n },\n extendedData: {\n modelId: { selector: \"IdToHex(this.Model.Id)\" },\n categoryId: { selector: \"IdToHex(this.Category.Id)\" },\n imageId: \"icon-item\",\n },\n supportsFiltering: true,\n })}\n FROM ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n this.Parent.Id IN (${elementIds.map(() => \"?\").join(\",\")})\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n bindings: elementIds.map((id) => ({ type: \"id\", value: id })),\n },\n },\n ];\n }\n\n public static async createInstanceKeyPaths(props: ModelsTreeInstanceKeyPathsProps) {\n if (ModelsTreeInstanceKeyPathsProps.isLabelProps(props)) {\n const labelsFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: props.imodelAccess });\n return createInstanceKeyPathsFromInstanceLabel({ ...props, labelsFactory });\n }\n return createInstanceKeyPathsFromTargetItems(props);\n }\n\n private async isSupported() {\n const [schemaName, className] = this._hierarchyConfig.elementClassSpecification.split(/[\\.:]/);\n if (!schemaName || !className) {\n throw new Error(\n `Provided class specification ${this._hierarchyConfig.elementClassSpecification} should be in format {SchemaName}:{ClassName} or {SchemaName}.{ClassName}`,\n );\n }\n\n const query: ECSqlQueryDef = {\n ecsql: `\n SELECT 1\n FROM ECDbMeta.ECSchemaDef s\n JOIN ECDbMeta.ECClassDef c ON c.Schema.Id = s.ECInstanceId\n WHERE s.Name = ? AND c.Name = ? AND c.ECInstanceId IS (BisCore.GeometricElement3d)\n `,\n bindings: [\n { type: \"string\", value: schemaName },\n { type: \"string\", value: className },\n ],\n };\n\n for await (const _row of this._queryExecutor.createQueryReader(query)) {\n return true;\n }\n return false;\n }\n}\n\nfunction createGeometricElementInstanceKeyPaths(\n imodelAccess: ECClassHierarchyInspector & LimitingECSqlQueryExecutor,\n idsCache: ModelsTreeIdsCache,\n hierarchyConfig: ModelsTreeHierarchyConfiguration,\n targetItems: Array<Id64String | ElementsGroupInfo>,\n): Observable<HierarchyFilteringPath> {\n const elementIds = targetItems.filter((info): info is Id64String => typeof info === \"string\");\n const groupInfos = targetItems.filter((info): info is ElementsGroupInfo => typeof info !== \"string\");\n const separator = \";\";\n\n return defer(() => {\n const targetElementsInfoQuery =\n elementIds.length > 0\n ? `\n SELECT e.ECInstanceId, e.ECClassId, e.Parent.Id, e.Model.Id, e.Category.Id, -1\n FROM ${hierarchyConfig.elementClassSpecification} e\n WHERE e.ECInstanceId IN (${elementIds.join(\",\")})\n `\n : undefined;\n\n const targetGroupingNodesElementInfoQueries = groupInfos.map(\n ({ parent, groupingNode }, index) => `\n SELECT e.ECInstanceId, e.ECClassId, e.Parent.Id, e.Model.Id, e.Category.Id, ${index}\n FROM ${hierarchyConfig.elementClassSpecification} e\n WHERE\n e.ECClassId IS (${groupingNode.key.className})\n AND ${parent.type === \"element\" ? `e.Parent.Id IN (${parent.ids.join(\",\")})` : `e.Parent.Id IS NULL AND e.Category.Id IN (${parent.ids.join(\",\")}) AND e.Model.Id IN (${parent.modelIds.join(\",\")})`}\n `,\n );\n\n const ctes = [\n `InstanceElementsWithClassGroupingNodes(ECInstanceId, ECClassId, ParentId, ModelId, CategoryId, GroupingNodeIndex) AS (\n ${[...(targetElementsInfoQuery ? [targetElementsInfoQuery] : []), ...targetGroupingNodesElementInfoQueries].join(\" UNION ALL \")}\n )`,\n `ModelsCategoriesElementsHierarchy(ECInstanceId, ParentId, ModelId, GroupingNodeIndex, Path) AS (\n SELECT\n e.ECInstanceId,\n e.ParentId,\n e.ModelId,\n e.GroupingNodeIndex,\n IIF(e.ParentId IS NULL,\n 'm${separator}' || CAST(IdToHex([m].[ECInstanceId]) AS TEXT) || '${separator}c${separator}' || CAST(IdToHex([c].[ECInstanceId]) AS TEXT) || '${separator}e${separator}' || CAST(IdToHex([e].[ECInstanceId]) AS TEXT),\n 'e${separator}' || CAST(IdToHex([e].[ECInstanceId]) AS TEXT)\n )\n\n FROM InstanceElementsWithClassGroupingNodes e\n LEFT JOIN bis.GeometricModel3d m ON (e.ParentId IS NULL AND m.ECInstanceId = e.ModelId)\n LEFT JOIN bis.SpatialCategory c ON (e.ParentId IS NULL AND c.ECInstanceId = e.CategoryId)\n\n UNION ALL\n\n SELECT\n pe.ECInstanceId,\n pe.Parent.Id,\n pe.Model.Id,\n ce.GroupingNodeIndex,\n IIF(pe.Parent.Id IS NULL,\n 'm${separator}' || CAST(IdToHex([m].[ECInstanceId]) AS TEXT) || '${separator}c${separator}' || CAST(IdToHex([c].[ECInstanceId]) AS TEXT) || '${separator}e${separator}' || CAST(IdToHex([pe].[ECInstanceId]) AS TEXT) || '${separator}' || ce.Path,\n 'e${separator}' || CAST(IdToHex([pe].[ECInstanceId]) AS TEXT) || '${separator}' || ce.Path\n )\n FROM ModelsCategoriesElementsHierarchy ce\n JOIN ${hierarchyConfig.elementClassSpecification} pe ON (pe.ECInstanceId = ce.ParentId OR pe.ECInstanceId = ce.ModelId AND ce.ParentId IS NULL)\n LEFT JOIN bis.GeometricModel3d m ON (pe.Parent.Id IS NULL AND m.ECInstanceId = pe.Model.Id)\n LEFT JOIN bis.SpatialCategory c ON (pe.Parent.Id IS NULL AND c.ECInstanceId = pe.Category.Id)\n )`,\n ];\n const ecsql = `\n SELECT mce.ModelId, mce.Path, mce.GroupingNodeIndex\n FROM ModelsCategoriesElementsHierarchy mce\n WHERE mce.ParentId IS NULL\n `;\n\n return imodelAccess.createQueryReader({ ctes, ecsql }, { rowFormat: \"Indexes\", limit: \"unbounded\" });\n }).pipe(\n releaseMainThreadOnItemsCount(300),\n map((row) => parseQueryRow(row, groupInfos, separator, hierarchyConfig.elementClassSpecification)),\n mergeMap(({ modelId, elementHierarchyPath, groupingNode }) =>\n from(idsCache.createModelInstanceKeyPaths(modelId)).pipe(\n mergeAll(),\n map((modelPath) => {\n // We dont want to modify the original path, we create a copy that we can modify\n const newModelPath = [...modelPath];\n newModelPath.pop(); // model is already included in the element hierarchy path\n const path = [...newModelPath, ...elementHierarchyPath];\n if (!groupingNode) {\n return path;\n }\n return {\n path,\n options: {\n autoExpand: {\n key: groupingNode.key,\n depth: groupingNode.parentKeys.length,\n },\n },\n };\n }),\n ),\n ),\n );\n}\n\nfunction parseQueryRow(row: ECSqlQueryRow, groupInfos: ElementsGroupInfo[], separator: string, elementClassName: string) {\n const rowElements: string[] = row[1].split(separator);\n const path = new Array<InstanceKey>();\n for (let i = 0; i < rowElements.length; i += 2) {\n switch (rowElements[i]) {\n case \"e\":\n path.push({ className: elementClassName, id: rowElements[i + 1] });\n break;\n case \"c\":\n path.push({ className: \"BisCore.SpatialCategory\", id: rowElements[i + 1] });\n break;\n case \"m\":\n path.push({ className: \"BisCore.GeometricModel3d\", id: rowElements[i + 1] });\n break;\n }\n }\n return {\n modelId: row[0],\n elementHierarchyPath: path,\n groupingNode: row[2] === -1 ? undefined : groupInfos[row[2]].groupingNode,\n };\n}\n\nasync function createInstanceKeyPathsFromTargetItems({\n targetItems,\n imodelAccess,\n hierarchyConfig,\n idsCache,\n limit,\n}: ModelsTreeInstanceKeyPathsFromTargetItemsProps): Promise<HierarchyFilteringPath[]> {\n if (limit !== \"unbounded\" && targetItems.length > (limit ?? MAX_FILTERING_INSTANCE_KEY_COUNT)) {\n throw new FilterLimitExceededError(limit ?? MAX_FILTERING_INSTANCE_KEY_COUNT);\n }\n\n return lastValueFrom(\n from(targetItems).pipe(\n releaseMainThreadOnItemsCount(2000),\n mergeMap(async (key): Promise<{ key: string; type: number } | { key: ElementsGroupInfo; type: 0 }> => {\n if (\"parent\" in key) {\n return { key, type: 0 };\n }\n\n if (await imodelAccess.classDerivesFrom(key.className, \"BisCore.Subject\")) {\n return { key: key.id, type: 1 };\n }\n\n if (await imodelAccess.classDerivesFrom(key.className, \"BisCore.Model\")) {\n return { key: key.id, type: 2 };\n }\n\n if (await imodelAccess.classDerivesFrom(key.className, \"BisCore.SpatialCategory\")) {\n return { key: key.id, type: 3 };\n }\n\n return { key: key.id, type: 0 };\n }, 2),\n reduce(\n (acc, value) => {\n if (value.type === 1) {\n acc.subjects.push(value.key);\n return acc;\n }\n if (value.type === 2) {\n acc.models.push(value.key);\n return acc;\n }\n if (value.type === 3) {\n acc.categories.push(value.key);\n return acc;\n }\n acc.elements.push(value.key);\n return acc;\n },\n {\n models: new Array<Id64String>(),\n categories: new Array<Id64String>(),\n subjects: new Array<Id64String>(),\n elements: new Array<Id64String | ElementsGroupInfo>(),\n },\n ),\n switchMap(async (ids) => {\n const elementsLength = ids.elements.length;\n return collect(\n merge(\n from(ids.subjects).pipe(mergeMap((id) => from(idsCache.createSubjectInstanceKeysPath(id)))),\n from(ids.models).pipe(mergeMap((id) => from(idsCache.createModelInstanceKeyPaths(id)).pipe(mergeAll()))),\n from(ids.categories).pipe(mergeMap((id) => from(idsCache.createCategoryInstanceKeyPaths(id)).pipe(mergeAll()))),\n from(ids.elements).pipe(\n bufferCount(Math.ceil(elementsLength / Math.ceil(elementsLength / 5000))),\n releaseMainThreadOnItemsCount(1),\n mergeMap((block) => createGeometricElementInstanceKeyPaths(imodelAccess, idsCache, hierarchyConfig, block), 10),\n ),\n ),\n );\n }),\n ),\n );\n}\n\nasync function createInstanceKeyPathsFromInstanceLabel(\n props: ModelsTreeInstanceKeyPathsFromInstanceLabelProps & { labelsFactory: IInstanceLabelSelectClauseFactory },\n) {\n const elementLabelSelectClause = await props.labelsFactory.createSelectClause({\n classAlias: \"e\",\n className: \"BisCore.Element\",\n // eslint-disable-next-line @typescript-eslint/unbound-method\n selectorsConcatenator: ECSql.createConcatenatedValueStringSelector,\n });\n const targetsReader = props.imodelAccess.createQueryReader(\n {\n ecsql: `\n SELECT *\n FROM (\n SELECT\n ec_classname(e.ECClassId, 's.c'),\n e.ECInstanceId,\n ${elementLabelSelectClause} Label\n FROM BisCore.Element e\n WHERE e.ECClassId IS (BisCore.Subject, BisCore.SpatialCategory, ${props.hierarchyConfig.elementClassSpecification})\n\n UNION ALL\n\n SELECT\n ec_classname(m.ECClassId, 's.c'),\n m.ECInstanceId,\n ${elementLabelSelectClause} Label\n FROM BisCore.GeometricModel3d m\n JOIN BisCore.Element e ON e.ECInstanceId = m.ModeledElement.Id\n WHERE NOT m.IsPrivate\n ${props.hierarchyConfig.showEmptyModels ? \"\" : `AND EXISTS (SELECT 1 FROM ${props.hierarchyConfig.elementClassSpecification} WHERE Model.Id = m.ECInstanceId)`}\n AND json_extract(e.JsonProperties, '$.PhysicalPartition.Model.Content') IS NULL\n AND json_extract(e.JsonProperties, '$.GraphicalPartition3d.Model.Content') IS NULL\n )\n WHERE Label LIKE '%' || ? || '%' ESCAPE '\\\\'\n LIMIT ${MAX_FILTERING_INSTANCE_KEY_COUNT + 1}\n `,\n bindings: [{ type: \"string\", value: props.label.replace(/[%_\\\\]/g, \"\\\\$&\") }],\n },\n { rowFormat: \"Indexes\", restartToken: \"tree-widget/models-tree/filter-by-label-query\", limit: props.limit },\n );\n\n const targetKeys = new Array<InstanceKey>();\n for await (const row of targetsReader) {\n targetKeys.push({ className: row[0], id: row[1] });\n }\n\n return createInstanceKeyPathsFromTargetItems({ ...props, targetItems: targetKeys });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ModelsTreeDefinition.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.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 { bufferCount, defer, firstValueFrom, from, lastValueFrom, map, merge, mergeAll, mergeMap, reduce, switchMap } from \"rxjs\";\nimport { IModel } from \"@itwin/core-common\";\nimport {\n createNodesQueryClauseFactory,\n createPredicateBasedHierarchyDefinition,\n NodeSelectClauseColumnNames,\n ProcessedHierarchyNode,\n} from \"@itwin/presentation-hierarchies\";\nimport { createBisInstanceLabelSelectClauseFactory, ECSql } from \"@itwin/presentation-shared\";\nimport {\n ELEMENT_CLASS_NAME,\n GEOMETRIC_ELEMENT_3D_CLASS_NAME,\n GEOMETRIC_MODEL_3D_CLASS_NAME,\n INFORMATION_PARTITION_ELEMENT_CLASS_NAME,\n MODEL_CLASS_NAME,\n SPATIAL_CATEGORY_CLASS_NAME,\n SUB_MODELED_ELEMENT_CLASS_NAME,\n SUBJECT_CLASS_NAME,\n} from \"../common/internal/ClassNameDefinitions.js\";\nimport { collect } from \"../common/internal/Rxjs.js\";\nimport { createIdsSelector, parseIdsSelectorResult, releaseMainThreadOnItemsCount } from \"../common/internal/Utils.js\";\nimport { FilterLimitExceededError } from \"../common/TreeErrors.js\";\n\nimport type { Id64String } from \"@itwin/core-bentley\";\nimport type { Observable } from \"rxjs\";\nimport type {\n ECClassHierarchyInspector,\n ECSchemaProvider,\n ECSqlBinding,\n ECSqlQueryDef,\n ECSqlQueryRow,\n IInstanceLabelSelectClauseFactory,\n InstanceKey,\n} from \"@itwin/presentation-shared\";\nimport type {\n ClassGroupingNodeKey,\n createIModelHierarchyProvider,\n DefineHierarchyLevelProps,\n DefineInstanceNodeChildHierarchyLevelProps,\n GroupingHierarchyNode,\n HierarchyDefinition,\n HierarchyLevelDefinition,\n HierarchyNodesDefinition,\n LimitingECSqlQueryExecutor,\n NodesQueryClauseFactory,\n} from \"@itwin/presentation-hierarchies\";\nimport type { ModelsTreeIdsCache } from \"./internal/ModelsTreeIdsCache.js\";\nimport type { ElementId } from \"../common/internal/Types.js\";\n\n/** @beta */\nexport type ClassGroupingHierarchyNode = GroupingHierarchyNode & { key: ClassGroupingNodeKey };\n\nconst MAX_FILTERING_INSTANCE_KEY_COUNT = 100;\n\n/**\n * Defines hierarchy configuration supported by `ModelsTree`.\n * @beta\n */\nexport interface ModelsTreeHierarchyConfiguration {\n /** Should element nodes be grouped by class. Defaults to `enable`. */\n elementClassGrouping: \"enable\" | \"enableWithCounts\" | \"disable\";\n /** Full class name of a `GeometricElement3d` sub-class that should be used to load element nodes. Defaults to `BisCore.GeometricElement3d`. */\n elementClassSpecification: string;\n /** Should models without elements be shown. Defaults to `false`. */\n showEmptyModels: boolean;\n /** Should the root Subject node be hidden. Defaults to `false`. */\n hideRootSubject: boolean;\n}\n\n/** @internal */\nexport const defaultHierarchyConfiguration: ModelsTreeHierarchyConfiguration = {\n elementClassGrouping: \"enable\",\n elementClassSpecification: GEOMETRIC_ELEMENT_3D_CLASS_NAME,\n showEmptyModels: false,\n hideRootSubject: false,\n};\n\ninterface ModelsTreeDefinitionProps {\n imodelAccess: ECSchemaProvider & ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n idsCache: ModelsTreeIdsCache;\n hierarchyConfig: ModelsTreeHierarchyConfiguration;\n}\n\n/** @beta */\nexport interface ElementsGroupInfo {\n parent:\n | {\n ids: Id64String[];\n type: \"element\";\n }\n | {\n ids: Id64String[];\n modelIds: Id64String[];\n type: \"category\";\n };\n groupingNode: ClassGroupingHierarchyNode;\n}\n\ninterface ModelsTreeInstanceKeyPathsFromTargetItemsProps {\n imodelAccess: ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n idsCache: ModelsTreeIdsCache;\n targetItems: Array<InstanceKey | ElementsGroupInfo>;\n hierarchyConfig: ModelsTreeHierarchyConfiguration;\n limit?: number | \"unbounded\";\n}\n\ninterface ModelsTreeInstanceKeyPathsFromInstanceLabelProps {\n imodelAccess: ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n idsCache: ModelsTreeIdsCache;\n label: string;\n hierarchyConfig: ModelsTreeHierarchyConfiguration;\n limit?: number | \"unbounded\";\n}\n\n/** @internal */\nexport type ModelsTreeInstanceKeyPathsProps = ModelsTreeInstanceKeyPathsFromTargetItemsProps | ModelsTreeInstanceKeyPathsFromInstanceLabelProps;\ntype HierarchyProviderProps = Parameters<typeof createIModelHierarchyProvider>[0];\ntype HierarchyFilteringPaths = NonNullable<NonNullable<HierarchyProviderProps[\"filtering\"]>[\"paths\"]>;\ntype HierarchyFilteringPath = HierarchyFilteringPaths[number];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport namespace ModelsTreeInstanceKeyPathsProps {\n export function isLabelProps(props: ModelsTreeInstanceKeyPathsProps): props is ModelsTreeInstanceKeyPathsFromInstanceLabelProps {\n return !!(props as ModelsTreeInstanceKeyPathsFromInstanceLabelProps).label;\n }\n}\n\n/** @internal */\nexport class ModelsTreeDefinition implements HierarchyDefinition {\n private _impl: HierarchyDefinition;\n private _idsCache: ModelsTreeIdsCache;\n private _hierarchyConfig: ModelsTreeHierarchyConfiguration;\n private _selectQueryFactory: NodesQueryClauseFactory;\n private _nodeLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory;\n private _queryExecutor: LimitingECSqlQueryExecutor;\n private _isSupported?: Promise<boolean>;\n\n public constructor(props: ModelsTreeDefinitionProps) {\n this._impl = createPredicateBasedHierarchyDefinition({\n classHierarchyInspector: props.imodelAccess,\n hierarchy: {\n rootNodes: async (requestProps) =>\n this.createSubjectChildrenQuery({ ...requestProps, parentNodeInstanceIds: this._hierarchyConfig.hideRootSubject ? [IModel.rootSubjectId] : [] }),\n childNodes: [\n {\n parentInstancesNodePredicate: SUBJECT_CLASS_NAME,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createSubjectChildrenQuery(requestProps),\n },\n {\n parentInstancesNodePredicate: SUB_MODELED_ELEMENT_CLASS_NAME,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createISubModeledElementChildrenQuery(requestProps),\n },\n {\n parentInstancesNodePredicate: GEOMETRIC_MODEL_3D_CLASS_NAME,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createGeometricModel3dChildrenQuery(requestProps),\n },\n {\n parentInstancesNodePredicate: SPATIAL_CATEGORY_CLASS_NAME,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createSpatialCategoryChildrenQuery(requestProps),\n },\n {\n parentInstancesNodePredicate: GEOMETRIC_ELEMENT_3D_CLASS_NAME,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createGeometricElement3dChildrenQuery(requestProps),\n },\n ],\n },\n });\n this._idsCache = props.idsCache;\n this._queryExecutor = props.imodelAccess;\n this._hierarchyConfig = props.hierarchyConfig;\n this._nodeLabelSelectClauseFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: props.imodelAccess });\n this._selectQueryFactory = createNodesQueryClauseFactory({\n imodelAccess: props.imodelAccess,\n instanceLabelSelectClauseFactory: this._nodeLabelSelectClauseFactory,\n });\n }\n\n public async postProcessNode(node: ProcessedHierarchyNode): Promise<ProcessedHierarchyNode> {\n if (ProcessedHierarchyNode.isGroupingNode(node)) {\n return {\n ...node,\n label: this._hierarchyConfig.elementClassGrouping === \"enableWithCounts\" ? `${node.label} (${node.children.length})` : node.label,\n extendedData: {\n ...node.extendedData,\n // add `modelId` and `categoryId` from the first grouped element\n ...node.children[0].extendedData,\n // `imageId` is assigned to instance nodes at query time, but grouping ones need to\n // be handled during post-processing\n imageId: \"icon-ec-class\",\n },\n };\n }\n return node;\n }\n\n public async defineHierarchyLevel(props: DefineHierarchyLevelProps) {\n if (this._isSupported === undefined) {\n this._isSupported = this.isSupported();\n }\n\n if ((await this._isSupported) === false) {\n return [];\n }\n\n return this._impl.defineHierarchyLevel(props);\n }\n\n private async createSubjectChildrenQuery({\n parentNodeInstanceIds: parentSubjectIds,\n instanceFilter,\n }: Pick<DefineInstanceNodeChildHierarchyLevelProps, \"parentNodeInstanceIds\" | \"instanceFilter\">): Promise<HierarchyLevelDefinition> {\n const [subjectFilterClauses, modelFilterClauses] = await Promise.all([\n this._selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: SUBJECT_CLASS_NAME, alias: \"this\" },\n }),\n this._selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: GEOMETRIC_MODEL_3D_CLASS_NAME, alias: \"this\" },\n }),\n ]);\n const [childSubjectIds, childModelIds] = parentSubjectIds.length\n ? await Promise.all([this._idsCache.getChildSubjectIds(parentSubjectIds), this._idsCache.getChildSubjectModelIds(parentSubjectIds)])\n : [[IModel.rootSubjectId], []];\n const defs = new Array<HierarchyNodesDefinition>();\n childSubjectIds.length &&\n defs.push({\n fullClassName: SUBJECT_CLASS_NAME,\n query: {\n ecsql: `\n SELECT\n ${await this._selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this._nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: SUBJECT_CLASS_NAME,\n }),\n },\n hideIfNoChildren: true,\n hasChildren: { selector: `InVirtualSet(?, this.ECInstanceId)` },\n grouping: { byLabel: { action: \"merge\", groupId: \"subject\" } },\n extendedData: {\n imageId: { selector: `IIF(this.ECInstanceId = ${IModel.rootSubjectId}, 'icon-imodel-hollow-2', 'icon-folder')` },\n isSubject: true,\n },\n autoExpand: { selector: `IIF(this.ECInstanceId = ${IModel.rootSubjectId}, true, false)` },\n supportsFiltering: true,\n })}\n FROM ${subjectFilterClauses.from} this\n ${subjectFilterClauses.joins}\n WHERE\n this.ECInstanceId IN (${childSubjectIds.map(() => \"?\").join(\",\")})\n ${subjectFilterClauses.where ? `AND ${subjectFilterClauses.where}` : \"\"}\n `,\n bindings: [\n { type: \"idset\", value: await this._idsCache.getParentSubjectIds() },\n ...childSubjectIds.map((id): ECSqlBinding => ({ type: \"id\", value: id })),\n ],\n },\n });\n childModelIds.length &&\n defs.push({\n fullClassName: GEOMETRIC_MODEL_3D_CLASS_NAME,\n query: {\n ecsql: `\n SELECT model.ECInstanceId AS ECInstanceId, model.*\n FROM (\n SELECT\n ${await this._selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"m.ECClassId\" },\n ecInstanceId: { selector: \"m.ECInstanceId\" },\n nodeLabel: {\n selector: await this._nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"partition\",\n className: INFORMATION_PARTITION_ELEMENT_CLASS_NAME,\n }),\n },\n hideNodeInHierarchy: {\n selector: `\n CASE\n WHEN (\n json_extract([partition].JsonProperties, '$.PhysicalPartition.Model.Content') IS NOT NULL\n OR json_extract([partition].JsonProperties, '$.GraphicalPartition3d.Model.Content') IS NOT NULL\n ) THEN 1\n ELSE 0\n END\n `,\n },\n hasChildren: this._hierarchyConfig.showEmptyModels\n ? {\n selector: `\n IFNULL((\n SELECT 1\n FROM ${this._hierarchyConfig.elementClassSpecification} e\n WHERE e.Model.Id = m.ECInstanceId\n LIMIT 1\n ), 0)\n `,\n }\n : true,\n extendedData: {\n imageId: \"icon-model\",\n isModel: true,\n },\n supportsFiltering: true,\n })}\n FROM ${GEOMETRIC_MODEL_3D_CLASS_NAME} m\n JOIN ${INFORMATION_PARTITION_ELEMENT_CLASS_NAME} [partition] ON [partition].ECInstanceId = m.ModeledElement.Id\n WHERE\n m.ECInstanceId IN (${childModelIds.map(() => \"?\").join(\",\")})\n ) model\n JOIN ${modelFilterClauses.from} this ON this.ECInstanceId = model.ECInstanceId\n ${modelFilterClauses.joins}\n ${modelFilterClauses.where ? `AND (model.${NodeSelectClauseColumnNames.HideNodeInHierarchy} OR ${modelFilterClauses.where})` : \"\"}\n `,\n bindings: childModelIds.map((id): ECSqlBinding => ({ type: \"id\", value: id })),\n },\n });\n return defs;\n }\n\n private async createISubModeledElementChildrenQuery({\n parentNodeInstanceIds: elementIds,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n // note: we do not apply hierarchy level filtering on this hierarchy level, because it's always\n // hidden - the filter will get applied on the child hierarchy levels\n return [\n {\n fullClassName: GEOMETRIC_MODEL_3D_CLASS_NAME,\n query: {\n ecsql: `\n SELECT\n ${await this._selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: \"\", // doesn't matter - the node is always hidden\n hideNodeInHierarchy: true,\n })}\n FROM ${GEOMETRIC_MODEL_3D_CLASS_NAME} this\n WHERE\n this.ModeledElement.Id IN (${elementIds.map(() => \"?\").join(\",\")})\n AND NOT this.IsPrivate\n AND this.ECInstanceId IN (SELECT Model.Id FROM ${this._hierarchyConfig.elementClassSpecification})\n `,\n bindings: [...elementIds.map((id): ECSqlBinding => ({ type: \"id\", value: id }))],\n },\n },\n ];\n }\n\n private async createGeometricModel3dChildrenQuery({\n parentNodeInstanceIds: modelIds,\n instanceFilter,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this._selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: SPATIAL_CATEGORY_CLASS_NAME, alias: \"this\" },\n });\n return [\n {\n fullClassName: SPATIAL_CATEGORY_CLASS_NAME,\n query: {\n ecsql: `\n SELECT\n ${await this._selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this._nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: SPATIAL_CATEGORY_CLASS_NAME,\n }),\n },\n grouping: { byLabel: { action: \"merge\", groupId: \"category\" } },\n hasChildren: true,\n extendedData: {\n imageId: \"icon-layers\",\n isCategory: true,\n modelIds: { selector: createIdsSelector(modelIds) },\n },\n supportsFiltering: true,\n })}\n FROM ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n EXISTS (\n SELECT 1\n FROM ${this._hierarchyConfig.elementClassSpecification} element\n WHERE\n element.Model.Id IN (${modelIds.map(() => \"?\").join(\",\")})\n AND element.Category.Id = +this.ECInstanceId\n AND element.Parent.Id IS NULL\n )\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n bindings: modelIds.map((id) => ({ type: \"id\", value: id })),\n },\n },\n ];\n }\n\n private async createSpatialCategoryChildrenQuery({\n parentNodeInstanceIds: categoryIds,\n parentNode,\n instanceFilter,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const modelIds = parseIdsSelectorResult(parentNode.extendedData?.modelIds);\n if (modelIds.length === 0) {\n throw new Error(`Invalid category node \"${parentNode.label}\" - missing model information.`);\n }\n const instanceFilterClauses = await this._selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: this._hierarchyConfig.elementClassSpecification, alias: \"this\" },\n });\n const modeledElements = await firstValueFrom(\n from(modelIds).pipe(\n mergeMap(async (modelId) => this._idsCache.getCategoriesModeledElements(modelId, categoryIds)),\n reduce((acc, foundModeledElements) => {\n return acc.concat(foundModeledElements);\n }, new Array<ElementId>()),\n ),\n );\n return [\n {\n fullClassName: this._hierarchyConfig.elementClassSpecification,\n query: {\n ecsql: `\n SELECT\n ${await this._selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this._nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: this._hierarchyConfig.elementClassSpecification,\n }),\n },\n grouping: {\n byClass: this._hierarchyConfig.elementClassGrouping !== \"disable\",\n },\n hasChildren: {\n selector: `\n IIF(\n ${modeledElements.length ? `this.ECInstanceId IN (${modeledElements.join(\",\")})` : `FALSE`},\n 1,\n IFNULL((\n SELECT 1\n FROM ${this._hierarchyConfig.elementClassSpecification} ce\n WHERE ce.Parent.Id = this.ECInstanceId\n LIMIT 1\n ), 0)\n )\n `,\n },\n extendedData: {\n modelId: { selector: \"IdToHex(this.Model.Id)\" },\n categoryId: { selector: \"IdToHex(this.Category.Id)\" },\n imageId: \"icon-item\",\n },\n supportsFiltering: true,\n })}\n FROM ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n this.Category.Id IN (${categoryIds.map(() => \"?\").join(\",\")})\n AND this.Model.Id IN (${modelIds.map(() => \"?\").join(\",\")})\n AND this.Parent.Id IS NULL\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n bindings: [...categoryIds.map((id) => ({ type: \"id\", value: id })), ...modelIds.map((id) => ({ type: \"id\", value: id }))] as ECSqlBinding[],\n },\n },\n ];\n }\n\n private async createGeometricElement3dChildrenQuery({\n parentNodeInstanceIds: elementIds,\n instanceFilter,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this._selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: this._hierarchyConfig.elementClassSpecification, alias: \"this\" },\n });\n return [\n {\n fullClassName: this._hierarchyConfig.elementClassSpecification,\n query: {\n ecsql: `\n SELECT\n ${await this._selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this._nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: this._hierarchyConfig.elementClassSpecification,\n }),\n },\n grouping: {\n byClass: this._hierarchyConfig.elementClassGrouping !== \"disable\",\n },\n hasChildren: {\n selector: `\n IFNULL((\n SELECT 1\n FROM ${this._hierarchyConfig.elementClassSpecification} ce\n JOIN ${MODEL_CLASS_NAME} m ON ce.Model.Id = m.ECInstanceId\n WHERE ce.Parent.Id = this.ECInstanceId OR (ce.Model.Id = this.ECInstanceId AND m.IsPrivate = false)\n LIMIT 1\n ), 0)\n `,\n },\n extendedData: {\n modelId: { selector: \"IdToHex(this.Model.Id)\" },\n categoryId: { selector: \"IdToHex(this.Category.Id)\" },\n imageId: \"icon-item\",\n },\n supportsFiltering: true,\n })}\n FROM ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n this.Parent.Id IN (${elementIds.map(() => \"?\").join(\",\")})\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n bindings: elementIds.map((id) => ({ type: \"id\", value: id })),\n },\n },\n ];\n }\n\n public static async createInstanceKeyPaths(props: ModelsTreeInstanceKeyPathsProps) {\n if (ModelsTreeInstanceKeyPathsProps.isLabelProps(props)) {\n const labelsFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: props.imodelAccess });\n return createInstanceKeyPathsFromInstanceLabel({ ...props, labelsFactory });\n }\n return createInstanceKeyPathsFromTargetItems(props);\n }\n\n private async isSupported() {\n const [schemaName, className] = this._hierarchyConfig.elementClassSpecification.split(/[\\.:]/);\n if (!schemaName || !className) {\n throw new Error(\n `Provided class specification ${this._hierarchyConfig.elementClassSpecification} should be in format {SchemaName}:{ClassName} or {SchemaName}.{ClassName}`,\n );\n }\n\n const query: ECSqlQueryDef = {\n ecsql: `\n SELECT 1\n FROM ECDbMeta.ECSchemaDef s\n JOIN ECDbMeta.ECClassDef c ON c.Schema.Id = s.ECInstanceId\n WHERE s.Name = ? AND c.Name = ? AND c.ECInstanceId IS (BisCore.GeometricElement3d)\n `,\n bindings: [\n { type: \"string\", value: schemaName },\n { type: \"string\", value: className },\n ],\n };\n\n for await (const _row of this._queryExecutor.createQueryReader(query)) {\n return true;\n }\n return false;\n }\n}\n\nfunction createGeometricElementInstanceKeyPaths(\n imodelAccess: ECClassHierarchyInspector & LimitingECSqlQueryExecutor,\n idsCache: ModelsTreeIdsCache,\n hierarchyConfig: ModelsTreeHierarchyConfiguration,\n targetItems: Array<Id64String | ElementsGroupInfo>,\n): Observable<HierarchyFilteringPath> {\n const elementIds = targetItems.filter((info): info is ElementId => typeof info === \"string\");\n const groupInfos = targetItems.filter((info): info is ElementsGroupInfo => typeof info !== \"string\");\n const separator = \";\";\n\n return defer(() => {\n const targetElementsInfoQuery =\n elementIds.length > 0\n ? `\n SELECT e.ECInstanceId, e.ECClassId, e.Parent.Id, e.Model.Id, e.Category.Id, -1\n FROM ${hierarchyConfig.elementClassSpecification} e\n WHERE e.ECInstanceId IN (${elementIds.join(\",\")})\n `\n : undefined;\n\n const targetGroupingNodesElementInfoQueries = groupInfos.map(\n ({ parent, groupingNode }, index) => `\n SELECT e.ECInstanceId, e.ECClassId, e.Parent.Id, e.Model.Id, e.Category.Id, ${index}\n FROM ${hierarchyConfig.elementClassSpecification} e\n WHERE\n e.ECClassId IS (${groupingNode.key.className})\n AND ${parent.type === \"element\" ? `e.Parent.Id IN (${parent.ids.join(\",\")})` : `e.Parent.Id IS NULL AND e.Category.Id IN (${parent.ids.join(\",\")}) AND e.Model.Id IN (${parent.modelIds.join(\",\")})`}\n `,\n );\n\n const ctes = [\n `InstanceElementsWithClassGroupingNodes(ECInstanceId, ECClassId, ParentId, ModelId, CategoryId, GroupingNodeIndex) AS (\n ${[...(targetElementsInfoQuery ? [targetElementsInfoQuery] : []), ...targetGroupingNodesElementInfoQueries].join(\" UNION ALL \")}\n )`,\n `ModelsCategoriesElementsHierarchy(ECInstanceId, ParentId, ModelId, GroupingNodeIndex, Path) AS (\n SELECT\n e.ECInstanceId,\n e.ParentId,\n e.ModelId,\n e.GroupingNodeIndex,\n IIF(e.ParentId IS NULL,\n 'm${separator}' || CAST(IdToHex([m].[ECInstanceId]) AS TEXT) || '${separator}c${separator}' || CAST(IdToHex([c].[ECInstanceId]) AS TEXT) || '${separator}e${separator}' || CAST(IdToHex([e].[ECInstanceId]) AS TEXT),\n 'e${separator}' || CAST(IdToHex([e].[ECInstanceId]) AS TEXT)\n )\n\n FROM InstanceElementsWithClassGroupingNodes e\n LEFT JOIN ${GEOMETRIC_MODEL_3D_CLASS_NAME} m ON (e.ParentId IS NULL AND m.ECInstanceId = e.ModelId)\n LEFT JOIN ${SPATIAL_CATEGORY_CLASS_NAME} c ON (e.ParentId IS NULL AND c.ECInstanceId = e.CategoryId)\n\n UNION ALL\n\n SELECT\n pe.ECInstanceId,\n pe.Parent.Id,\n pe.Model.Id,\n ce.GroupingNodeIndex,\n IIF(pe.Parent.Id IS NULL,\n 'm${separator}' || CAST(IdToHex([m].[ECInstanceId]) AS TEXT) || '${separator}c${separator}' || CAST(IdToHex([c].[ECInstanceId]) AS TEXT) || '${separator}e${separator}' || CAST(IdToHex([pe].[ECInstanceId]) AS TEXT) || '${separator}' || ce.Path,\n 'e${separator}' || CAST(IdToHex([pe].[ECInstanceId]) AS TEXT) || '${separator}' || ce.Path\n )\n FROM ModelsCategoriesElementsHierarchy ce\n JOIN ${hierarchyConfig.elementClassSpecification} pe ON (pe.ECInstanceId = ce.ParentId OR pe.ECInstanceId = ce.ModelId AND ce.ParentId IS NULL)\n LEFT JOIN ${GEOMETRIC_MODEL_3D_CLASS_NAME} m ON (pe.Parent.Id IS NULL AND m.ECInstanceId = pe.Model.Id)\n LEFT JOIN ${SPATIAL_CATEGORY_CLASS_NAME} c ON (pe.Parent.Id IS NULL AND c.ECInstanceId = pe.Category.Id)\n )`,\n ];\n const ecsql = `\n SELECT mce.ModelId, mce.Path, mce.GroupingNodeIndex\n FROM ModelsCategoriesElementsHierarchy mce\n WHERE mce.ParentId IS NULL\n `;\n\n return imodelAccess.createQueryReader({ ctes, ecsql }, { rowFormat: \"Indexes\", limit: \"unbounded\" });\n }).pipe(\n releaseMainThreadOnItemsCount(300),\n map((row) => parseQueryRow(row, groupInfos, separator, hierarchyConfig.elementClassSpecification)),\n mergeMap(({ modelId, elementHierarchyPath, groupingNode }) =>\n from(idsCache.createModelInstanceKeyPaths(modelId)).pipe(\n mergeAll(),\n map((modelPath) => {\n // We dont want to modify the original path, we create a copy that we can modify\n const newModelPath = [...modelPath];\n newModelPath.pop(); // model is already included in the element hierarchy path\n const path = [...newModelPath, ...elementHierarchyPath];\n if (!groupingNode) {\n return path;\n }\n return {\n path,\n options: {\n autoExpand: {\n key: groupingNode.key,\n depth: groupingNode.parentKeys.length,\n },\n },\n };\n }),\n ),\n ),\n );\n}\n\nfunction parseQueryRow(row: ECSqlQueryRow, groupInfos: ElementsGroupInfo[], separator: string, elementClassName: string) {\n const rowElements: string[] = row[1].split(separator);\n const path = new Array<InstanceKey>();\n for (let i = 0; i < rowElements.length; i += 2) {\n switch (rowElements[i]) {\n case \"e\":\n path.push({ className: elementClassName, id: rowElements[i + 1] });\n break;\n case \"c\":\n path.push({ className: SPATIAL_CATEGORY_CLASS_NAME, id: rowElements[i + 1] });\n break;\n case \"m\":\n path.push({ className: GEOMETRIC_MODEL_3D_CLASS_NAME, id: rowElements[i + 1] });\n break;\n }\n }\n return {\n modelId: row[0],\n elementHierarchyPath: path,\n groupingNode: row[2] === -1 ? undefined : groupInfos[row[2]].groupingNode,\n };\n}\n\nasync function createInstanceKeyPathsFromTargetItems({\n targetItems,\n imodelAccess,\n hierarchyConfig,\n idsCache,\n limit,\n}: ModelsTreeInstanceKeyPathsFromTargetItemsProps): Promise<HierarchyFilteringPath[]> {\n if (limit !== \"unbounded\" && targetItems.length > (limit ?? MAX_FILTERING_INSTANCE_KEY_COUNT)) {\n throw new FilterLimitExceededError(limit ?? MAX_FILTERING_INSTANCE_KEY_COUNT);\n }\n\n return lastValueFrom(\n from(targetItems).pipe(\n releaseMainThreadOnItemsCount(2000),\n mergeMap(async (key): Promise<{ key: Id64String; type: number } | { key: ElementsGroupInfo; type: 0 }> => {\n if (\"parent\" in key) {\n return { key, type: 0 };\n }\n\n if (await imodelAccess.classDerivesFrom(key.className, SUBJECT_CLASS_NAME)) {\n return { key: key.id, type: 1 };\n }\n\n if (await imodelAccess.classDerivesFrom(key.className, MODEL_CLASS_NAME)) {\n return { key: key.id, type: 2 };\n }\n\n if (await imodelAccess.classDerivesFrom(key.className, SPATIAL_CATEGORY_CLASS_NAME)) {\n return { key: key.id, type: 3 };\n }\n\n return { key: key.id, type: 0 };\n }, 2),\n reduce(\n (acc, value) => {\n if (value.type === 1) {\n acc.subjectIds.push(value.key);\n return acc;\n }\n if (value.type === 2) {\n acc.modelIds.push(value.key);\n return acc;\n }\n if (value.type === 3) {\n acc.categoryIds.push(value.key);\n return acc;\n }\n acc.elementIds.push(value.key);\n return acc;\n },\n {\n modelIds: new Array<Id64String>(),\n categoryIds: new Array<Id64String>(),\n subjectIds: new Array<Id64String>(),\n elementIds: new Array<Id64String | ElementsGroupInfo>(),\n },\n ),\n switchMap(async (ids) => {\n const elementsLength = ids.elementIds.length;\n return collect(\n merge(\n from(ids.subjectIds).pipe(mergeMap((id) => from(idsCache.createSubjectInstanceKeysPath(id)))),\n from(ids.modelIds).pipe(mergeMap((id) => from(idsCache.createModelInstanceKeyPaths(id)).pipe(mergeAll()))),\n from(ids.categoryIds).pipe(mergeMap((id) => from(idsCache.createCategoryInstanceKeyPaths(id)).pipe(mergeAll()))),\n from(ids.elementIds).pipe(\n bufferCount(Math.ceil(elementsLength / Math.ceil(elementsLength / 5000))),\n releaseMainThreadOnItemsCount(1),\n mergeMap((block) => createGeometricElementInstanceKeyPaths(imodelAccess, idsCache, hierarchyConfig, block), 10),\n ),\n ),\n );\n }),\n ),\n );\n}\n\nasync function createInstanceKeyPathsFromInstanceLabel(\n props: ModelsTreeInstanceKeyPathsFromInstanceLabelProps & { labelsFactory: IInstanceLabelSelectClauseFactory },\n) {\n const elementLabelSelectClause = await props.labelsFactory.createSelectClause({\n classAlias: \"e\",\n className: ELEMENT_CLASS_NAME,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n selectorsConcatenator: ECSql.createConcatenatedValueStringSelector,\n });\n const targetsReader = props.imodelAccess.createQueryReader(\n {\n ecsql: `\n SELECT *\n FROM (\n SELECT\n ec_classname(e.ECClassId, 's.c'),\n e.ECInstanceId,\n ${elementLabelSelectClause} Label\n FROM ${ELEMENT_CLASS_NAME} e\n WHERE e.ECClassId IS (${SUBJECT_CLASS_NAME}, ${SPATIAL_CATEGORY_CLASS_NAME}, ${props.hierarchyConfig.elementClassSpecification})\n\n UNION ALL\n\n SELECT\n ec_classname(m.ECClassId, 's.c'),\n m.ECInstanceId,\n ${elementLabelSelectClause} Label\n FROM ${GEOMETRIC_MODEL_3D_CLASS_NAME} m\n JOIN ${ELEMENT_CLASS_NAME} e ON e.ECInstanceId = m.ModeledElement.Id\n WHERE NOT m.IsPrivate\n ${props.hierarchyConfig.showEmptyModels ? \"\" : `AND EXISTS (SELECT 1 FROM ${props.hierarchyConfig.elementClassSpecification} WHERE Model.Id = m.ECInstanceId)`}\n AND json_extract(e.JsonProperties, '$.PhysicalPartition.Model.Content') IS NULL\n AND json_extract(e.JsonProperties, '$.GraphicalPartition3d.Model.Content') IS NULL\n )\n WHERE Label LIKE '%' || ? || '%' ESCAPE '\\\\'\n LIMIT ${MAX_FILTERING_INSTANCE_KEY_COUNT + 1}\n `,\n bindings: [{ type: \"string\", value: props.label.replace(/[%_\\\\]/g, \"\\\\$&\") }],\n },\n { rowFormat: \"Indexes\", restartToken: \"tree-widget/models-tree/filter-by-label-query\", limit: props.limit },\n );\n\n const targetKeys = new Array<InstanceKey>();\n for await (const row of targetsReader) {\n targetKeys.push({ className: row[0], id: row[1] });\n }\n\n return createInstanceKeyPathsFromTargetItems({ ...props, targetItems: targetKeys });\n}\n"]}
|
|
@@ -3,126 +3,40 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
3
3
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
4
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
5
|
*--------------------------------------------------------------------------------------------*/
|
|
6
|
-
import { useCallback, useEffect, useMemo,
|
|
6
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
7
|
+
import categorySvg from "@itwin/itwinui-icons/bis-category-3d.svg";
|
|
8
|
+
import classSvg from "@itwin/itwinui-icons/bis-class.svg";
|
|
9
|
+
import elementSvg from "@itwin/itwinui-icons/bis-element.svg";
|
|
10
|
+
import subjectSvg from "@itwin/itwinui-icons/bis-subject.svg";
|
|
11
|
+
import modelSvg from "@itwin/itwinui-icons/model-cube.svg";
|
|
7
12
|
import { Icon } from "@itwin/itwinui-react/bricks";
|
|
8
|
-
import { createECSqlQueryExecutor } from "@itwin/presentation-core-interop";
|
|
9
|
-
import { HierarchyNodeIdentifier, HierarchyNodeKey } from "@itwin/presentation-hierarchies";
|
|
10
13
|
import { EmptyTreeContent, FilterUnknownError, NoFilterMatches, TooManyFilterMatches, TooManyInstancesFocused, UnknownInstanceFocusError, } from "../common/components/EmptyTree.js";
|
|
11
|
-
import { useFocusedInstancesContext } from "../common/FocusedInstancesContext.js";
|
|
12
|
-
import { FilterLimitExceededError } from "../common/TreeErrors.js";
|
|
13
|
-
import { useIModelChangeListener } from "../common/UseIModelChangeListener.js";
|
|
14
|
-
import { useTelemetryContext } from "../common/UseTelemetryContext.js";
|
|
15
|
-
import { ModelsTreeIdsCache } from "./internal/ModelsTreeIdsCache.js";
|
|
16
14
|
import { ModelsTreeNode } from "./internal/ModelsTreeNode.js";
|
|
17
15
|
import { createModelsTreeVisibilityHandler } from "./internal/ModelsTreeVisibilityHandler.js";
|
|
16
|
+
import { useFilteredPaths } from "./internal/UseFilteredPaths.js";
|
|
17
|
+
import { useIdsCache } from "./internal/UseIdsCache.js";
|
|
18
18
|
import { defaultHierarchyConfiguration, ModelsTreeDefinition } from "./ModelsTreeDefinition.js";
|
|
19
19
|
/**
|
|
20
20
|
* Custom hook to create and manage state for the models tree.
|
|
21
21
|
* @beta
|
|
22
22
|
*/
|
|
23
23
|
export function useModelsTree({ activeView, filter, hierarchyConfig, visibilityHandlerOverrides, getFilteredPaths, onModelsFiltered, selectionPredicate: nodeTypeSelectionPredicate, emptyTreeContent, }) {
|
|
24
|
-
const [filteringError, setFilteringError] = useState(undefined);
|
|
25
24
|
const hierarchyConfiguration = useMemo(() => ({
|
|
26
25
|
...defaultHierarchyConfiguration,
|
|
27
26
|
...hierarchyConfig,
|
|
28
27
|
}),
|
|
29
28
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
30
29
|
Object.values(hierarchyConfig ?? {}));
|
|
31
|
-
const { onFeatureUsed } = useTelemetryContext();
|
|
32
30
|
const { getModelsTreeIdsCache, visibilityHandlerFactory, onFilteredPathsChanged } = useCachedVisibility(activeView, hierarchyConfiguration, visibilityHandlerOverrides);
|
|
33
|
-
const { loadFocusedItems } = useFocusedInstancesContext();
|
|
34
31
|
const getHierarchyDefinition = useCallback(({ imodelAccess }) => new ModelsTreeDefinition({ imodelAccess, idsCache: getModelsTreeIdsCache(), hierarchyConfig: hierarchyConfiguration }), [getModelsTreeIdsCache, hierarchyConfiguration]);
|
|
35
|
-
const getPaths =
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
onFilteredPathsChanged(filteredPaths);
|
|
44
|
-
if (!onModelsFiltered) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
const modelIds = await getModels(filteredPaths, getModelsTreeIdsCache(), classInspector);
|
|
48
|
-
onModelsFiltered(modelIds);
|
|
49
|
-
};
|
|
50
|
-
if (loadFocusedItems) {
|
|
51
|
-
return async ({ imodelAccess }) => {
|
|
52
|
-
try {
|
|
53
|
-
const focusedItems = await collectFocusedItems(loadFocusedItems);
|
|
54
|
-
const paths = await ModelsTreeDefinition.createInstanceKeyPaths({
|
|
55
|
-
imodelAccess,
|
|
56
|
-
idsCache: getModelsTreeIdsCache(),
|
|
57
|
-
targetItems: focusedItems,
|
|
58
|
-
hierarchyConfig: hierarchyConfiguration,
|
|
59
|
-
});
|
|
60
|
-
void handlePaths(paths, imodelAccess);
|
|
61
|
-
return paths.map((path) => ("path" in path ? path : { path, options: { autoExpand: true } }));
|
|
62
|
-
}
|
|
63
|
-
catch (e) {
|
|
64
|
-
const newError = e instanceof FilterLimitExceededError ? "tooManyInstancesFocused" : "unknownInstanceFocusError";
|
|
65
|
-
if (newError !== "tooManyInstancesFocused") {
|
|
66
|
-
const feature = e instanceof Error && e.message.includes("query too long to execute or server is too busy") ? "error-timeout" : "error-unknown";
|
|
67
|
-
onFeatureUsed({ featureId: feature, reportInteraction: false });
|
|
68
|
-
}
|
|
69
|
-
setFilteringError(newError);
|
|
70
|
-
return [];
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
if (getFilteredPaths) {
|
|
75
|
-
return async ({ imodelAccess }) => {
|
|
76
|
-
try {
|
|
77
|
-
const paths = await getFilteredPaths({
|
|
78
|
-
createInstanceKeyPaths: async (props) => ModelsTreeDefinition.createInstanceKeyPaths({
|
|
79
|
-
...props,
|
|
80
|
-
imodelAccess,
|
|
81
|
-
idsCache: getModelsTreeIdsCache(),
|
|
82
|
-
hierarchyConfig: hierarchyConfiguration,
|
|
83
|
-
limit: "unbounded",
|
|
84
|
-
}),
|
|
85
|
-
});
|
|
86
|
-
void handlePaths(paths, imodelAccess);
|
|
87
|
-
return paths;
|
|
88
|
-
}
|
|
89
|
-
catch (e) {
|
|
90
|
-
const newError = e instanceof FilterLimitExceededError ? "tooManyFilterMatches" : "unknownFilterError";
|
|
91
|
-
if (newError !== "tooManyFilterMatches") {
|
|
92
|
-
const feature = e instanceof Error && e.message.includes("query too long to execute or server is too busy") ? "error-timeout" : "error-unknown";
|
|
93
|
-
onFeatureUsed({ featureId: feature, reportInteraction: false });
|
|
94
|
-
}
|
|
95
|
-
setFilteringError(newError);
|
|
96
|
-
return [];
|
|
97
|
-
}
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
if (filter) {
|
|
101
|
-
return async ({ imodelAccess }) => {
|
|
102
|
-
onFeatureUsed({ featureId: "filtering", reportInteraction: true });
|
|
103
|
-
try {
|
|
104
|
-
const paths = await ModelsTreeDefinition.createInstanceKeyPaths({
|
|
105
|
-
imodelAccess,
|
|
106
|
-
label: filter,
|
|
107
|
-
idsCache: getModelsTreeIdsCache(),
|
|
108
|
-
hierarchyConfig: hierarchyConfiguration,
|
|
109
|
-
});
|
|
110
|
-
void handlePaths(paths, imodelAccess);
|
|
111
|
-
return paths.map((path) => ("path" in path ? path : { path, options: { autoExpand: true } }));
|
|
112
|
-
}
|
|
113
|
-
catch (e) {
|
|
114
|
-
const newError = e instanceof FilterLimitExceededError ? "tooManyFilterMatches" : "unknownFilterError";
|
|
115
|
-
if (newError !== "tooManyFilterMatches") {
|
|
116
|
-
const feature = e instanceof Error && e.message.includes("query too long to execute or server is too busy") ? "error-timeout" : "error-unknown";
|
|
117
|
-
onFeatureUsed({ featureId: feature, reportInteraction: false });
|
|
118
|
-
}
|
|
119
|
-
setFilteringError(newError);
|
|
120
|
-
return [];
|
|
121
|
-
}
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
return undefined;
|
|
125
|
-
}, [filter, loadFocusedItems, getModelsTreeIdsCache, onFeatureUsed, getFilteredPaths, hierarchyConfiguration, onModelsFiltered, onFilteredPathsChanged]);
|
|
32
|
+
const { getPaths, filteringError } = useFilteredPaths({
|
|
33
|
+
hierarchyConfiguration,
|
|
34
|
+
filter,
|
|
35
|
+
getFilteredPaths,
|
|
36
|
+
getModelsTreeIdsCache,
|
|
37
|
+
onFilteredPathsChanged,
|
|
38
|
+
onModelsFiltered,
|
|
39
|
+
});
|
|
126
40
|
const nodeSelectionPredicate = useCallback((node) => {
|
|
127
41
|
if (!nodeTypeSelectionPredicate) {
|
|
128
42
|
return true;
|
|
@@ -136,42 +50,31 @@ export function useModelsTree({ activeView, filter, hierarchyConfig, visibilityH
|
|
|
136
50
|
visibilityHandlerFactory,
|
|
137
51
|
getHierarchyDefinition,
|
|
138
52
|
getFilteredPaths: getPaths,
|
|
139
|
-
emptyTreeContent: getEmptyTreeContentComponent(filter, filteringError, emptyTreeContent),
|
|
140
|
-
highlight: filter ? { text: filter } : undefined,
|
|
53
|
+
emptyTreeContent: useMemo(() => getEmptyTreeContentComponent(filter, filteringError, emptyTreeContent), [filter, filteringError, emptyTreeContent]),
|
|
54
|
+
highlight: useMemo(() => (filter ? { text: filter } : undefined), [filter]),
|
|
141
55
|
selectionPredicate: nodeSelectionPredicate,
|
|
142
56
|
},
|
|
143
57
|
rendererProps: {
|
|
144
58
|
// onDoubleClick,
|
|
145
|
-
getDecorations: (node) => _jsx(ModelsTreeIcon, { node: node }),
|
|
59
|
+
getDecorations: useCallback((node) => _jsx(ModelsTreeIcon, { node: node }), []),
|
|
146
60
|
},
|
|
147
61
|
};
|
|
148
62
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
const
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
targetSubjects.add(currStep.id);
|
|
165
|
-
break;
|
|
166
|
-
}
|
|
167
|
-
// collect all the models from the filtered path
|
|
168
|
-
if (await classInspector.classDerivesFrom(currStep.className, "BisCore.GeometricModel3d")) {
|
|
169
|
-
targetModels.add(currStep.id);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
const matchingModels = await idsCache.getSubjectModelIds([...targetSubjects]);
|
|
174
|
-
return [...targetModels, ...matchingModels];
|
|
63
|
+
function createVisibilityHandlerFactory(activeView, idsCacheGetter, overrides, filteredPaths) {
|
|
64
|
+
return ({ imodelAccess }) => createModelsTreeVisibilityHandler({ viewport: activeView, idsCache: idsCacheGetter(), imodelAccess, overrides, filteredPaths });
|
|
65
|
+
}
|
|
66
|
+
function useCachedVisibility(activeView, hierarchyConfig, overrides) {
|
|
67
|
+
const { getCache: getModelsTreeIdsCache } = useIdsCache(activeView.iModel, hierarchyConfig);
|
|
68
|
+
const [filteredPaths, setFilteredPaths] = useState();
|
|
69
|
+
const [visibilityHandlerFactory, setVisibilityHandlerFactory] = useState(() => createVisibilityHandlerFactory(activeView, getModelsTreeIdsCache, overrides, filteredPaths));
|
|
70
|
+
useEffect(() => {
|
|
71
|
+
setVisibilityHandlerFactory(() => createVisibilityHandlerFactory(activeView, getModelsTreeIdsCache, overrides, filteredPaths));
|
|
72
|
+
}, [activeView, getModelsTreeIdsCache, overrides, filteredPaths]);
|
|
73
|
+
return {
|
|
74
|
+
getModelsTreeIdsCache,
|
|
75
|
+
visibilityHandlerFactory,
|
|
76
|
+
onFilteredPathsChanged: useCallback((paths) => setFilteredPaths(paths), []),
|
|
77
|
+
};
|
|
175
78
|
}
|
|
176
79
|
function getEmptyTreeContentComponent(filter, error, emptyTreeContent) {
|
|
177
80
|
if (isInstanceFocusError(error)) {
|
|
@@ -203,18 +106,13 @@ function InstanceFocusError({ error }) {
|
|
|
203
106
|
}
|
|
204
107
|
return _jsx(UnknownInstanceFocusError, { base: "modelsTree" });
|
|
205
108
|
}
|
|
206
|
-
const subjectSvg = new URL("@itwin/itwinui-icons/bis-subject.svg", import.meta.url).href;
|
|
207
|
-
const classSvg = new URL("@itwin/itwinui-icons/bis-class.svg", import.meta.url).href;
|
|
208
|
-
const modelSvg = new URL("@itwin/itwinui-icons/model-cube.svg", import.meta.url).href;
|
|
209
|
-
const categorySvg = new URL("@itwin/itwinui-icons/bis-category-3d.svg", import.meta.url).href;
|
|
210
|
-
const elementSvg = new URL("@itwin/itwinui-icons/bis-element.svg", import.meta.url).href;
|
|
211
109
|
/** @beta */
|
|
212
110
|
export function ModelsTreeIcon({ node }) {
|
|
213
|
-
if (node.extendedData?.imageId === undefined) {
|
|
111
|
+
if (node.nodeData.extendedData?.imageId === undefined) {
|
|
214
112
|
return undefined;
|
|
215
113
|
}
|
|
216
114
|
const getIcon = () => {
|
|
217
|
-
switch (node.extendedData.imageId) {
|
|
115
|
+
switch (node.nodeData.extendedData.imageId) {
|
|
218
116
|
case "icon-layers":
|
|
219
117
|
return categorySvg;
|
|
220
118
|
case "icon-item":
|
|
@@ -231,68 +129,4 @@ export function ModelsTreeIcon({ node }) {
|
|
|
231
129
|
};
|
|
232
130
|
return _jsx(Icon, { href: getIcon() });
|
|
233
131
|
}
|
|
234
|
-
function createVisibilityHandlerFactory(activeView, idsCacheGetter, overrides, filteredPaths) {
|
|
235
|
-
return ({ imodelAccess }) => createModelsTreeVisibilityHandler({ viewport: activeView, idsCache: idsCacheGetter(), imodelAccess, overrides, filteredPaths });
|
|
236
|
-
}
|
|
237
|
-
function useCachedVisibility(activeView, hierarchyConfig, overrides) {
|
|
238
|
-
const cacheRef = useRef();
|
|
239
|
-
const currentIModelRef = useRef(activeView.iModel);
|
|
240
|
-
const resetModelsTreeIdsCache = () => {
|
|
241
|
-
cacheRef.current?.[Symbol.dispose]();
|
|
242
|
-
cacheRef.current = undefined;
|
|
243
|
-
};
|
|
244
|
-
const getModelsTreeIdsCache = useCallback(() => {
|
|
245
|
-
if (!cacheRef.current) {
|
|
246
|
-
cacheRef.current = new ModelsTreeIdsCache(createECSqlQueryExecutor(currentIModelRef.current), hierarchyConfig);
|
|
247
|
-
}
|
|
248
|
-
return cacheRef.current;
|
|
249
|
-
}, [hierarchyConfig]);
|
|
250
|
-
const [filteredPaths, setFilteredPaths] = useState();
|
|
251
|
-
const [visibilityHandlerFactory, setVisibilityHandlerFactory] = useState(() => createVisibilityHandlerFactory(activeView, getModelsTreeIdsCache, overrides, filteredPaths));
|
|
252
|
-
useIModelChangeListener({
|
|
253
|
-
imodel: activeView.iModel,
|
|
254
|
-
action: useCallback(() => {
|
|
255
|
-
resetModelsTreeIdsCache();
|
|
256
|
-
setVisibilityHandlerFactory(() => createVisibilityHandlerFactory(activeView, getModelsTreeIdsCache, overrides, filteredPaths));
|
|
257
|
-
}, [activeView, getModelsTreeIdsCache, overrides, filteredPaths]),
|
|
258
|
-
});
|
|
259
|
-
useEffect(() => {
|
|
260
|
-
currentIModelRef.current = activeView.iModel;
|
|
261
|
-
setVisibilityHandlerFactory(() => createVisibilityHandlerFactory(activeView, getModelsTreeIdsCache, overrides, filteredPaths));
|
|
262
|
-
return () => resetModelsTreeIdsCache();
|
|
263
|
-
}, [activeView, getModelsTreeIdsCache, overrides, filteredPaths]);
|
|
264
|
-
return {
|
|
265
|
-
getModelsTreeIdsCache,
|
|
266
|
-
visibilityHandlerFactory,
|
|
267
|
-
onFilteredPathsChanged: useCallback((paths) => setFilteredPaths(paths), []),
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
async function collectFocusedItems(loadFocusedItems) {
|
|
271
|
-
const focusedItems = [];
|
|
272
|
-
const groupingNodeInfos = [];
|
|
273
|
-
for await (const key of loadFocusedItems()) {
|
|
274
|
-
if ("id" in key) {
|
|
275
|
-
focusedItems.push(key);
|
|
276
|
-
continue;
|
|
277
|
-
}
|
|
278
|
-
if (!HierarchyNodeKey.isClassGrouping(key.key)) {
|
|
279
|
-
continue;
|
|
280
|
-
}
|
|
281
|
-
const groupingNode = key;
|
|
282
|
-
if (!groupingNode.nonGroupingAncestor || !HierarchyNodeKey.isInstances(groupingNode.nonGroupingAncestor.key)) {
|
|
283
|
-
continue;
|
|
284
|
-
}
|
|
285
|
-
const parentKey = groupingNode.nonGroupingAncestor.key;
|
|
286
|
-
const type = groupingNode.nonGroupingAncestor.extendedData?.isCategory ? "category" : "element";
|
|
287
|
-
const modelIds = (groupingNode.nonGroupingAncestor.extendedData?.modelIds ?? []).flatMap((ids) => ids);
|
|
288
|
-
groupingNodeInfos.push({ groupingNode, parentType: type, parentKey, modelIds });
|
|
289
|
-
}
|
|
290
|
-
focusedItems.push(...groupingNodeInfos.map(({ parentKey, parentType, groupingNode, modelIds }) => ({
|
|
291
|
-
parent: parentType === "element"
|
|
292
|
-
? { type: "element", ids: parentKey.instanceKeys.map((key) => key.id) }
|
|
293
|
-
: { type: "category", ids: parentKey.instanceKeys.map((key) => key.id), modelIds },
|
|
294
|
-
groupingNode,
|
|
295
|
-
})));
|
|
296
|
-
return focusedItems;
|
|
297
|
-
}
|
|
298
132
|
//# sourceMappingURL=UseModelsTree.js.map
|