@itwin/tree-widget-react 4.0.0-alpha.25 → 4.0.0-alpha.26
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 +35 -1
- package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js +2 -1
- package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js.map +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.js +1 -1
- 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 +4 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js +4 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js +36 -47
- 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 +2 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js +4 -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 +2 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +75 -38
- 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/CategoriesTreeNode.d.ts +3 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeNode.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.d.ts +4 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +38 -23
- 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 +11 -21
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +16 -168
- 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/CategoriesTreeNodeInternal.d.ts +65 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNodeInternal.js +22 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNodeInternal.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseSearchPaths.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseSearchPaths.js +4 -4
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseSearchPaths.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.d.ts +6 -10
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.js +180 -88
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.d.ts +14 -5
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.js +43 -24
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/SearchResultsTree.d.ts +3 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/SearchResultsTree.js +78 -17
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/SearchResultsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.d.ts +2 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js +4 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js +91 -114
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeIcon.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeIcon.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeNode.d.ts +1 -3
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeNode.js +2 -4
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeNode.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.d.ts +13 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js +62 -32
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.d.ts +12 -9
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.js +42 -38
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.d.ts +15 -38
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js +59 -242
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNodeInternal.d.ts +29 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNodeInternal.js +19 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNodeInternal.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.d.ts +4 -8
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.js +154 -78
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHelper.js +20 -6
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHelper.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/SearchResultsTree.d.ts +6 -10
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/SearchResultsTree.js +104 -63
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/SearchResultsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/SharedTreeContextProvider.d.ts +7 -0
- package/lib/esm/tree-widget-react/components/trees/common/SharedTreeContextProvider.js +14 -0
- package/lib/esm/tree-widget-react/components/trees/common/SharedTreeContextProvider.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/TreeWidgetViewport.js +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/TreeWidgetViewport.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/Utils.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/common/Utils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.d.ts +4 -4
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js +1 -1
- 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 +4 -4
- 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.js +7 -5
- 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 +2 -2
- 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/VisibilityTreeRenderer.js +5 -5
- 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/SharedTreeContextProviderInternal.d.ts +20 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/SharedTreeContextProviderInternal.js +44 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/SharedTreeContextProviderInternal.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/Types.d.ts +4 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/Types.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.d.ts +12 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.js +2 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.d.ts +17 -6
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js +58 -29
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.d.ts +8 -14
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js +22 -26
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/{AlwaysAndNeverDrawnElementInfo.d.ts → caches/AlwaysAndNeverDrawnElementInfoCache.d.ts} +15 -21
- package/lib/esm/tree-widget-react/components/trees/common/internal/{AlwaysAndNeverDrawnElementInfo.js → caches/AlwaysAndNeverDrawnElementInfoCache.js} +40 -38
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/AlwaysAndNeverDrawnElementInfoCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/BaseIdsCache.d.ts +68 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/BaseIdsCache.js +148 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/BaseIdsCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementChildrenCache.d.ts +30 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementChildrenCache.js +151 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementChildrenCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementModelCategoriesCache.d.ts +32 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementModelCategoriesCache.js +106 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ElementModelCategoriesCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/{ModelCategoryElementsCountCache.d.ts → caches/ModelCategoryElementsCountCache.d.ts} +9 -2
- package/lib/esm/tree-widget-react/components/trees/common/internal/{ModelCategoryElementsCountCache.js → caches/ModelCategoryElementsCountCache.js} +17 -21
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ModelCategoryElementsCountCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ModeledElementsCache.d.ts +27 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ModeledElementsCache.js +106 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/ModeledElementsCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/SubCategoriesCache.d.ts +23 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/SubCategoriesCache.js +56 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/caches/SubCategoriesCache.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.d.ts +6 -6
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.js +27 -17
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.d.ts +7 -13
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.js +36 -35
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseSearchResultsTree.d.ts +18 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseSearchResultsTree.js +14 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseSearchResultsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.d.ts +46 -70
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.js +229 -361
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.js.map +1 -1
- 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.map +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/imodel-content-tree/IModelContentTree.d.ts +2 -2
- 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.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.js +1 -1
- 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.js +32 -19
- 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/index.d.ts +2 -1
- package/lib/esm/tree-widget-react/components/trees/index.js +2 -1
- package/lib/esm/tree-widget-react/components/trees/index.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.d.ts +4 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js +4 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.d.ts +7 -3
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js +36 -35
- 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 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js +3 -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 +1 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +56 -26
- 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.d.ts +5 -3
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js +25 -12
- 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/ModelsTreeIdsCache.d.ts +11 -23
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +56 -189
- 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/ModelsTreeNodeInternal.d.ts +52 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNodeInternal.js +22 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNodeInternal.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseSearchPaths.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseSearchPaths.js +8 -8
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseSearchPaths.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.d.ts +6 -10
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.js +179 -72
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHelper.d.ts +6 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHelper.js +20 -8
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHelper.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/SearchResultsTree.d.ts +4 -2
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/SearchResultsTree.js +73 -13
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/SearchResultsTree.js.map +1 -1
- package/lib/esm/tree-widget-react-internal.d.ts +1 -0
- package/lib/esm/tree-widget-react-internal.js +1 -0
- package/lib/esm/tree-widget-react-internal.js.map +1 -1
- package/package.json +77 -82
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseSearchPaths.d.ts +0 -20
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseSearchPaths.js +0 -53
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseSearchPaths.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/AlwaysAndNeverDrawnElementInfo.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js.map +0 -1
package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
3
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { bufferCount, defaultIfEmpty, defer, distinct, EMPTY, firstValueFrom, forkJoin, from, fromEvent, identity, lastValueFrom, map, merge, mergeMap, of, reduce, takeUntil, toArray, } from "rxjs";
|
|
5
|
+
import { bufferCount, defaultIfEmpty, defer, distinct, EMPTY, firstValueFrom, forkJoin, from, fromEvent, identity, lastValueFrom, map, merge, mergeAll, mergeMap, of, reduce, takeUntil, toArray, } from "rxjs";
|
|
6
6
|
import { assert, Guid } from "@itwin/core-bentley";
|
|
7
|
-
import { createNodesQueryClauseFactory, createPredicateBasedHierarchyDefinition, ProcessedHierarchyNode } from "@itwin/presentation-hierarchies";
|
|
7
|
+
import { createNodesQueryClauseFactory, createPredicateBasedHierarchyDefinition, HierarchyNode, ProcessedHierarchyNode } from "@itwin/presentation-hierarchies";
|
|
8
8
|
import { createBisInstanceLabelSelectClauseFactory, ECSql } from "@itwin/presentation-shared";
|
|
9
9
|
import { CLASS_NAME_DefinitionContainer, CLASS_NAME_InformationPartitionElement, CLASS_NAME_ISubModeledElement, CLASS_NAME_Model, CLASS_NAME_SubCategory, } from "../common/internal/ClassNameDefinitions.js";
|
|
10
10
|
import { catchBeSQLiteInterrupts } from "../common/internal/UseErrorState.js";
|
|
11
|
-
import { createIdsSelector, fromWithRelease, getClassesByView, getOptimalBatchSize,
|
|
11
|
+
import { createIdsSelector, fromWithRelease, getClassesByView, getOptimalBatchSize, groupingNodeDataFromChildren, parseIdsSelectorResult, releaseMainThreadOnItemsCount, } from "../common/internal/Utils.js";
|
|
12
12
|
import { SearchLimitExceededError } from "../common/TreeErrors.js";
|
|
13
13
|
const MAX_SEARCH_INSTANCE_KEY_COUNT = 100;
|
|
14
14
|
/** @internal */
|
|
@@ -58,26 +58,36 @@ export class CategoriesTreeDefinition {
|
|
|
58
58
|
async postProcessNode(node) {
|
|
59
59
|
if (ProcessedHierarchyNode.isGroupingNode(node)) {
|
|
60
60
|
const modelElementsMap = new Map();
|
|
61
|
-
node.children
|
|
61
|
+
for (const child of node.children) {
|
|
62
62
|
let modelEntry = modelElementsMap.get(child.extendedData?.modelId);
|
|
63
63
|
if (!modelEntry) {
|
|
64
|
-
modelEntry =
|
|
64
|
+
modelEntry = {
|
|
65
|
+
elementIds: new Set(),
|
|
66
|
+
categoryOfTopMostParentElement: child.extendedData?.categoryOfTopMostParentElement,
|
|
67
|
+
};
|
|
65
68
|
modelElementsMap.set(child.extendedData?.modelId, modelEntry);
|
|
66
69
|
}
|
|
67
70
|
assert(child.key.type === "instances");
|
|
68
71
|
for (const { id } of child.key.instanceKeys) {
|
|
69
|
-
modelEntry.add(id);
|
|
72
|
+
modelEntry.elementIds.add(id);
|
|
70
73
|
}
|
|
71
|
-
}
|
|
72
|
-
const { hasSearchTargetAncestor, hasDirectNonSearchTargets } =
|
|
74
|
+
}
|
|
75
|
+
const { hasSearchTargetAncestor, hasDirectNonSearchTargets, childrenCount, searchTargets } = groupingNodeDataFromChildren(node.children);
|
|
76
|
+
const firstChild = node.children[0];
|
|
77
|
+
assert(HierarchyNode.isInstancesNode(firstChild));
|
|
73
78
|
return {
|
|
74
79
|
...node,
|
|
75
80
|
label: node.label,
|
|
76
81
|
extendedData: {
|
|
77
82
|
...node.extendedData,
|
|
83
|
+
topMostParentElementId: firstChild.key.instanceKeys.every((instanceKey) => instanceKey.id !== firstChild.extendedData?.topMostParentElementId)
|
|
84
|
+
? firstChild.extendedData?.topMostParentElementId
|
|
85
|
+
: undefined,
|
|
78
86
|
// add `categoryId` from the first grouped element
|
|
79
|
-
categoryId:
|
|
87
|
+
categoryId: firstChild.extendedData?.categoryId,
|
|
80
88
|
modelElementsMap,
|
|
89
|
+
childrenCount,
|
|
90
|
+
...(!!searchTargets?.size ? { searchTargets } : {}),
|
|
81
91
|
...(hasDirectNonSearchTargets ? { hasDirectNonSearchTargets } : {}),
|
|
82
92
|
...(hasSearchTargetAncestor ? { hasSearchTargetAncestor } : {}),
|
|
83
93
|
// `imageId` is assigned to instance nodes at query time, but grouping ones need to
|
|
@@ -108,7 +118,7 @@ export class CategoriesTreeDefinition {
|
|
|
108
118
|
},
|
|
109
119
|
{
|
|
110
120
|
parentInstancesNodePredicate: this.#categoryModelClass,
|
|
111
|
-
definitions: async (requestProps) => this.
|
|
121
|
+
definitions: async (requestProps) => this.createGeometricModelChildrenQuery(requestProps),
|
|
112
122
|
},
|
|
113
123
|
]
|
|
114
124
|
: []),
|
|
@@ -167,18 +177,24 @@ export class CategoriesTreeDefinition {
|
|
|
167
177
|
},
|
|
168
178
|
];
|
|
169
179
|
}
|
|
170
|
-
async
|
|
171
|
-
const instanceFilterClauses = await
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
180
|
+
async createGeometricModelChildrenQuery({ parentNodeInstanceIds: modelIds, instanceFilter, }) {
|
|
181
|
+
const [instanceFilterClauses, categoryIds] = await Promise.all([
|
|
182
|
+
this.#selectQueryFactory.createFilterClauses({
|
|
183
|
+
filter: instanceFilter,
|
|
184
|
+
contentClass: { fullName: this.#categoryClass, alias: "this" },
|
|
185
|
+
}),
|
|
186
|
+
firstValueFrom(this.#idsCache.getCategoriesOfModelsTopMostElements(modelIds).pipe(map((categoriesSet) => [...categoriesSet]))),
|
|
187
|
+
]);
|
|
188
|
+
if (categoryIds.length === 0) {
|
|
189
|
+
return [];
|
|
190
|
+
}
|
|
175
191
|
return [
|
|
176
192
|
{
|
|
177
193
|
fullClassName: this.#categoryClass,
|
|
178
194
|
query: {
|
|
179
195
|
ecsql: `
|
|
180
|
-
|
|
181
|
-
|
|
196
|
+
SELECT
|
|
197
|
+
${await this.#selectQueryFactory.createSelectClause({
|
|
182
198
|
ecClassId: { selector: "this.ECClassId" },
|
|
183
199
|
ecInstanceId: { selector: "this.ECInstanceId" },
|
|
184
200
|
nodeLabel: {
|
|
@@ -197,19 +213,12 @@ export class CategoriesTreeDefinition {
|
|
|
197
213
|
},
|
|
198
214
|
supportsFiltering: true,
|
|
199
215
|
})}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
EXISTS (
|
|
204
|
-
SELECT 1
|
|
205
|
-
FROM ${this.#categoryElementClass} element
|
|
206
|
-
WHERE
|
|
207
|
-
element.Model.Id IN (${modelIds.join(",")})
|
|
208
|
-
AND element.Category.Id = +this.ECInstanceId
|
|
209
|
-
AND element.Parent.Id IS NULL
|
|
210
|
-
)
|
|
216
|
+
FROM ${instanceFilterClauses.from} this
|
|
217
|
+
${instanceFilterClauses.joins}
|
|
218
|
+
WHERE InVirtualSet(?, this.ECInstanceId)
|
|
211
219
|
${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : ""}
|
|
212
|
-
|
|
220
|
+
`,
|
|
221
|
+
bindings: [{ type: "idset", value: categoryIds }],
|
|
213
222
|
},
|
|
214
223
|
},
|
|
215
224
|
];
|
|
@@ -224,10 +233,10 @@ export class CategoriesTreeDefinition {
|
|
|
224
233
|
}));
|
|
225
234
|
const hierarchyDefinition = new Array();
|
|
226
235
|
if (categories.length > 0) {
|
|
227
|
-
|
|
236
|
+
(await this.createCategoriesQuery({ categories, instanceFilter })).forEach((def) => hierarchyDefinition.push(def));
|
|
228
237
|
}
|
|
229
238
|
if (definitionContainers.length > 0) {
|
|
230
|
-
|
|
239
|
+
(await this.createDefinitionContainersQuery({ definitionContainerIds: definitionContainers, instanceFilter })).forEach((def) => hierarchyDefinition.push(def));
|
|
231
240
|
}
|
|
232
241
|
return hierarchyDefinition;
|
|
233
242
|
}
|
|
@@ -378,6 +387,22 @@ export class CategoriesTreeDefinition {
|
|
|
378
387
|
},
|
|
379
388
|
];
|
|
380
389
|
}
|
|
390
|
+
createElementChildrenCountSelector(props) {
|
|
391
|
+
return `(
|
|
392
|
+
WITH RECURSIVE
|
|
393
|
+
ElementWithParent(id) AS (
|
|
394
|
+
SELECT e.ECInstanceId
|
|
395
|
+
FROM ${this.#categoryElementClass} e
|
|
396
|
+
WHERE e.ECInstanceId = ${props.elementIdSelector}
|
|
397
|
+
UNION ALL
|
|
398
|
+
SELECT c.ECInstanceId
|
|
399
|
+
FROM ${this.#categoryElementClass} c
|
|
400
|
+
JOIN ElementWithParent p ON p.id = c.Parent.Id
|
|
401
|
+
)
|
|
402
|
+
SELECT COUNT(1) - 1
|
|
403
|
+
FROM ElementWithParent
|
|
404
|
+
)`;
|
|
405
|
+
}
|
|
381
406
|
async createCategoryElementsQuery({ parentNodeInstanceIds: categoryIds, instanceFilter, parentNode, }) {
|
|
382
407
|
const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({
|
|
383
408
|
filter: instanceFilter,
|
|
@@ -385,13 +410,14 @@ export class CategoriesTreeDefinition {
|
|
|
385
410
|
});
|
|
386
411
|
const modelIds = parentNode.extendedData?.isCategoryOfSubModel
|
|
387
412
|
? parseIdsSelectorResult(parentNode.extendedData?.modelIds)
|
|
388
|
-
: await firstValueFrom(
|
|
413
|
+
: await firstValueFrom(from(categoryIds).pipe(mergeMap((categoryId) => this.#idsCache.getModels({ categoryId })), mergeAll(), distinct(), toArray()));
|
|
389
414
|
if (modelIds.length === 0) {
|
|
390
415
|
return [];
|
|
391
416
|
}
|
|
392
|
-
const modeledElements = await firstValueFrom(from(modelIds).pipe(mergeMap((modelId) => this.#idsCache.
|
|
393
|
-
|
|
394
|
-
|
|
417
|
+
const modeledElements = await firstValueFrom(from(modelIds).pipe(mergeMap((modelId) => from(categoryIds).pipe(mergeMap((categoryId) => this.#idsCache.getSubModels({ modelId, categoryId })), mergeAll())), toArray()));
|
|
418
|
+
const bindings = new Array();
|
|
419
|
+
categoryIds.forEach((id) => bindings.push({ type: "id", value: id }));
|
|
420
|
+
modelIds.forEach((id) => bindings.push({ type: "id", value: id }));
|
|
395
421
|
return [
|
|
396
422
|
{
|
|
397
423
|
fullClassName: this.#categoryElementClass,
|
|
@@ -429,6 +455,9 @@ export class CategoriesTreeDefinition {
|
|
|
429
455
|
categoryId: { selector: "IdToHex(this.Category.Id)" },
|
|
430
456
|
imageId: "icon-item",
|
|
431
457
|
isElement: true,
|
|
458
|
+
childrenCount: { selector: this.createElementChildrenCountSelector({ elementIdSelector: "this.ECInstanceId" }) },
|
|
459
|
+
categoryOfTopMostParentElement: { selector: "IdToHex(this.Category.Id)" },
|
|
460
|
+
topMostParentElementId: { selector: "IdToHex(this.ECInstanceId)" },
|
|
432
461
|
},
|
|
433
462
|
supportsFiltering: true,
|
|
434
463
|
})}
|
|
@@ -436,20 +465,23 @@ export class CategoriesTreeDefinition {
|
|
|
436
465
|
${parentNode.extendedData?.isCategoryOfSubModel ? "" : `JOIN ${CLASS_NAME_InformationPartitionElement} ipe ON ipe.ECInstanceId = this.Model.Id`}
|
|
437
466
|
${instanceFilterClauses.joins}
|
|
438
467
|
WHERE
|
|
439
|
-
this.Category.Id IN (${categoryIds.join(",")})
|
|
440
|
-
AND this.Model.Id IN (${modelIds.join(",")})
|
|
468
|
+
this.Category.Id IN (${categoryIds.map(() => "?").join(",")})
|
|
469
|
+
AND this.Model.Id IN (${modelIds.map(() => "?").join(",")})
|
|
441
470
|
AND this.Parent.Id IS NULL
|
|
442
471
|
${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : ""}
|
|
443
472
|
`,
|
|
473
|
+
bindings,
|
|
444
474
|
},
|
|
445
475
|
},
|
|
446
476
|
];
|
|
447
477
|
}
|
|
448
|
-
async createElementChildrenQuery({ parentNodeInstanceIds: elementIds, instanceFilter, }) {
|
|
478
|
+
async createElementChildrenQuery({ parentNodeInstanceIds: elementIds, instanceFilter, parentNode, }) {
|
|
449
479
|
const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({
|
|
450
480
|
filter: instanceFilter,
|
|
451
481
|
contentClass: { fullName: this.#categoryElementClass, alias: "this" },
|
|
452
482
|
});
|
|
483
|
+
const bindings = new Array();
|
|
484
|
+
elementIds.forEach((id) => bindings.push({ type: "id", value: id }));
|
|
453
485
|
return [
|
|
454
486
|
{
|
|
455
487
|
fullClassName: this.#categoryElementClass,
|
|
@@ -484,6 +516,11 @@ export class CategoriesTreeDefinition {
|
|
|
484
516
|
categoryId: { selector: "IdToHex(this.Category.Id)" },
|
|
485
517
|
imageId: "icon-item",
|
|
486
518
|
isElement: true,
|
|
519
|
+
childrenCount: { selector: this.createElementChildrenCountSelector({ elementIdSelector: "this.ECInstanceId" }) },
|
|
520
|
+
categoryOfTopMostParentElement: {
|
|
521
|
+
selector: `IdToHex(${parentNode.extendedData?.categoryOfTopMostParentElement})`,
|
|
522
|
+
},
|
|
523
|
+
topMostParentElementId: { selector: `IdToHex(${parentNode.extendedData?.topMostParentElementId})` },
|
|
487
524
|
},
|
|
488
525
|
supportsFiltering: true,
|
|
489
526
|
})}
|
package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CategoriesTreeDefinition.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EACL,WAAW,EACX,cAAc,EACd,KAAK,EACL,QAAQ,EACR,KAAK,EACL,cAAc,EACd,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,aAAa,EACb,GAAG,EACH,KAAK,EACL,QAAQ,EACR,EAAE,EACF,MAAM,EACN,SAAS,EACT,OAAO,GACR,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,6BAA6B,EAAE,uCAAuC,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACjJ,OAAO,EAAE,yCAAyC,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,EACL,8BAA8B,EAC9B,sCAAsC,EACtC,6BAA6B,EAC7B,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,4BAA4B,EAC5B,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AA4BnE,MAAM,6BAA6B,GAAG,GAAG,CAAC;AAiC1C,gBAAgB;AAChB,MAAM,CAAC,MAAM,6BAA6B,GAAyC;IACjF,iBAAiB,EAAE,KAAK;IACxB,YAAY,EAAE,KAAK;IACnB,mBAAmB,EAAE,KAAK;CAC3B,CAAC;AAEF,gBAAgB;AAChB,MAAM,OAAO,wBAAwB;IACnC,KAAK,CAA2C;IAChD,mBAAmB,CAA0B;IAC7C,6BAA6B,CAAoC;IACjE,SAAS,CAAyB;IAClC,gBAAgB,CAAuC;IACvD,aAAa,CAA4E;IACzF,cAAc,CAAS;IACvB,qBAAqB,CAAS;IAC9B,mBAAmB,CAAS;IAC5B,MAAM,CAAC,cAAc,GAAG,0BAA0B,CAAC;IAEnD,YAAmB,KAAoC;QACrD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,6BAA6B,GAAG,yCAAyC,CAAC,EAAE,uBAAuB,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QAChI,IAAI,CAAC,mBAAmB,GAAG,6BAA6B,CAAC;YACvD,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,gCAAgC,EAAE,IAAI,CAAC,6BAA6B;SACrE,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,eAAe,CAAC;QAC9C,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACrF,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,qBAAqB,GAAG,YAAY,CAAC;QAC1C,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC;IACxC,CAAC;IAEM,cAAc,GAAqB,KAAK,EAAE,IAAI,EAAE,EAAE;QACvD,IAAI,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC;YAClC,OAAO;gBACL,GAAG,IAAI;gBACP,YAAY,EAAE;oBACZ,GAAG,IAAI,CAAC,YAAY;oBACpB,QAAQ,EAAE,sBAAsB,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;iBAC7D;aACF,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEK,KAAK,CAAC,eAAe,CAAC,IAA4B;QACvD,IAAI,sBAAsB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA2B,CAAC;YAC5D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC9B,IAAI,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;gBACnE,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;oBACvB,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;gBAChE,CAAC;gBACD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;gBACvC,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;oBAC5C,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,GAAG,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE3G,OAAO;gBACL,GAAG,IAAI;gBACP,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,YAAY,EAAE;oBACZ,GAAG,IAAI,CAAC,YAAY;oBACpB,kDAAkD;oBAClD,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,UAAU;oBACrD,gBAAgB;oBAChB,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,yBAAyB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnE,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC/D,mFAAmF;oBACnF,oCAAoC;oBACpC,OAAO,EAAE,eAAe;iBACzB;aACF,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,sBAAsB;QAClC,IAAI,CAAC,KAAK,KAAK,CAAC,KAAK,IAAI,EAAE;YACzB,MAAM,8BAA8B,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,iCAAiC,EAAE,CAAC,CAAC;YAChH,OAAO,uCAAuC,CAAC;gBAC7C,uBAAuB,EAAE,IAAI,CAAC,aAAa;gBAC3C,SAAS,EAAE;oBACT,SAAS,EAAE,KAAK,EAAE,YAA2C,EAAE,EAAE,CAAC,IAAI,CAAC,4CAA4C,CAAC,YAAY,CAAC;oBACjI,UAAU,EAAE;wBACV,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY;4BACpC,CAAC,CAAC;gCACE;oCACE,4BAA4B,EAAE,IAAI,CAAC,qBAAqB;oCACxD,WAAW,EAAE,KAAK,EAAE,YAAwD,EAAE,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC;iCAC/H;gCACD;oCACE,4BAA4B,EAAE,6BAA6B;oCAC3D,WAAW,EAAE,KAAK,EAAE,YAAwD,EAAE,EAAE,CAAC,IAAI,CAAC,qCAAqC,CAAC,YAAY,CAAC;iCAC1I;gCACD;oCACE,4BAA4B,EAAE,IAAI,CAAC,mBAAmB;oCACtD,WAAW,EAAE,KAAK,EAAE,YAAwD,EAAE,EAAE,CAAC,IAAI,CAAC,mCAAmC,CAAC,YAAY,CAAC;iCACxI;6BACF;4BACH,CAAC,CAAC,EAAE,CAAC;wBACP,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY;4BAChF,CAAC,CAAC,EAAE;4BACJ,CAAC,CAAC;gCACE;oCACE,4BAA4B,EAAE,IAAI,CAAC,cAAc;oCACjD,WAAW,EAAE,KAAK,EAAE,YAAwD,EAAE,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC;iCAChI;6BACF,CAAC;wBACN,GAAG,CAAC,8BAA8B;4BAChC,CAAC,CAAC;gCACE;oCACE,4BAA4B,EAAE,8BAA8B;oCAC5D,WAAW,EAAE,KAAK,EAAE,YAAwD,EAAE,EAAE,CAC9E,IAAI,CAAC,4CAA4C,CAAC,YAAY,CAAC;iCAClE;6BACF;4BACH,CAAC,CAAC,EAAE,CAAC;qBACR;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,EAAE,CAAC;QACL,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEM,KAAK,CAAC,oBAAoB,CAAC,KAAgC;QAChE,OAAO,CAAC,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC;IAEO,KAAK,CAAC,qCAAqC,CAAC,EAClD,qBAAqB,EAAE,UAAU,GACU;QAC3C,+FAA+F;QAC/F,qEAAqE;QACrE,OAAO;YACL;gBACE,aAAa,EAAE,IAAI,CAAC,mBAAmB;gBACvC,KAAK,EAAE;oBACL,KAAK,EAAE;;gBAED,MAAM,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC;wBAClD,SAAS,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE;wBACzC,YAAY,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE;wBAC/C,SAAS,EAAE,EAAE,EAAE,6CAA6C;wBAC5D,mBAAmB,EAAE,IAAI;wBACzB,WAAW,EAAE,IAAI;wBACjB,YAAY,EAAE;4BACZ,OAAO,EAAE,IAAI;yBACd;qBACF,CAAC;mBACG,IAAI,CAAC,mBAAmB;;2CAEA,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;;+DAEf,IAAI,CAAC,qBAAqB;WAC9E;oBACD,QAAQ,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;iBACjF;aACF;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,mCAAmC,CAAC,EAChD,qBAAqB,EAAE,QAAQ,EAC/B,cAAc,GAC6B;QAC3C,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC;YAC/E,MAAM,EAAE,cAAc;YACtB,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE;SAC/D,CAAC,CAAC;QAEH,OAAO;YACL;gBACE,aAAa,EAAE,IAAI,CAAC,cAAc;gBAClC,KAAK,EAAE;oBACL,KAAK,EAAE;;cAEH,MAAM,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC;wBAClD,SAAS,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE;wBACzC,YAAY,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE;wBAC/C,SAAS,EAAE;4BACT,QAAQ,EAAE,MAAM,IAAI,CAAC,6BAA6B,CAAC,kBAAkB,CAAC;gCACpE,UAAU,EAAE,MAAM;gCAClB,SAAS,EAAE,IAAI,CAAC,cAAc;6BAC/B,CAAC;yBACH;wBACD,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE;wBAC/D,WAAW,EAAE,IAAI;wBACjB,YAAY,EAAE;4BACZ,OAAO,EAAE,aAAa;4BACtB,UAAU,EAAE,IAAI;4BAChB,QAAQ,EAAE,EAAE,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC,EAAE;4BACnD,oBAAoB,EAAE,IAAI;yBAC3B;wBACD,iBAAiB,EAAE,IAAI;qBACxB,CAAC;iBACG,qBAAqB,CAAC,IAAI;YAC/B,qBAAqB,CAAC,KAAK;;;;qBAIlB,IAAI,CAAC,qBAAqB;;uCAER,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;;;;cAI3C,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;SAC5E;iBACA;aACF;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,4CAA4C,CAAC,KAG1D;QACC,MAAM,EAAE,qBAAqB,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;QACxD,MAAM,EAAE,oBAAoB,EAAE,UAAU,EAAE,GAAG,MAAM,cAAc,CAC/D,qBAAqB,KAAK,SAAS;YACjC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,wCAAwC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC;YACtH,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,+CAA+C,CAAC;gBAC7D,4BAA4B,EAAE,qBAAqB;gBACnD,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,mBAAmB;aACxD,CAAC,CACP,CAAC;QACF,MAAM,mBAAmB,GAAG,IAAI,KAAK,EAA4B,CAAC;QAClE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;QAClG,CAAC;QACD,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,+BAA+B,CAAC,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9I,CAAC;QACD,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,+BAA+B,CAAC,EAC5C,sBAAsB,EACtB,cAAc,GAIf;QACC,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC;YAC/E,MAAM,EAAE,cAAc;YACtB,YAAY,EAAE,EAAE,QAAQ,EAAE,8BAA8B,EAAE,KAAK,EAAE,MAAM,EAAE;SAC1E,CAAC,CAAC;QAEH,OAAO;YACL;gBACE,aAAa,EAAE,8BAA8B;gBAC7C,KAAK,EAAE;oBACL,KAAK,EAAE;;gBAED,MAAM,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC;wBAClD,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,8BAA8B,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;wBAClF,YAAY,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE;wBAC/C,SAAS,EAAE;4BACT,QAAQ,EAAE,MAAM,IAAI,CAAC,6BAA6B,CAAC,kBAAkB,CAAC;gCACpE,UAAU,EAAE,MAAM;gCAClB,SAAS,EAAE,8BAA8B;6BAC1C,CAAC;yBACH;wBACD,YAAY,EAAE;4BACZ,qBAAqB,EAAE,IAAI;4BAC3B,OAAO,EAAE,2BAA2B;yBACrC;wBACD,WAAW,EAAE,IAAI;wBACjB,iBAAiB,EAAE,IAAI;qBACxB,CAAC;;gBAEA,qBAAqB,CAAC,IAAI;gBAC1B,qBAAqB,CAAC,KAAK;;sCAEL,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;gBACvD,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;WAC5E;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,EAClC,UAAU,EACV,cAAc,GAIf;QACC,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC;YAC/E,MAAM,EAAE,cAAc;YACtB,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE;SAC/D,CAAC,CAAC;QACH,MAAM,mCAAmC,GAAG,UAAU;aACnD,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,qBAAqB,GAAG,CAAC,CAAC;aAChE,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAE1C,MAAM,mBAAmB,GAAG,GAAG,EAAE;YAC/B,MAAM,UAAU,GAAG,IAAI,KAAK,EAAU,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,IAAI,mCAAmC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/F,UAAU,CAAC,IAAI,CAAC,yBAAyB,mCAAmC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7F,CAAC;YACD,IAAI,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;gBACvC,UAAU,CAAC,IAAI,CAAC;;;mBAGL,IAAI,CAAC,qBAAqB;;;sEAGyB,IAAI,CAAC,mBAAmB;YAClF,CAAC,CAAC;YACR,CAAC;YACD,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC;gBAC1B,CAAC,CAAC;oBACE,QAAQ,EAAE,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS;iBAClD;gBACH,CAAC,CAAC,KAAK,CAAC;QACZ,CAAC,CAAC;QAEF,OAAO;YACL;gBACE,aAAa,EAAE,IAAI,CAAC,cAAc;gBAClC,KAAK,EAAE;oBACL,KAAK,EAAE;;gBAED,MAAM,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC;wBAClD,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,8BAA8B,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;wBAClF,YAAY,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE;wBAC/C,SAAS,EAAE;4BACT,QAAQ,EAAE,MAAM,IAAI,CAAC,6BAA6B,CAAC,kBAAkB,CAAC;gCACpE,UAAU,EAAE,MAAM;gCAClB,SAAS,EAAE,IAAI,CAAC,cAAc;6BAC/B,CAAC;yBACH;wBACD,WAAW,EAAE,mBAAmB,EAAE;wBAClC,YAAY,EAAE;4BACZ,WAAW,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE;4BAC7C,UAAU,EAAE,IAAI;4BAChB,OAAO,EAAE,aAAa;4BACtB,gBAAgB,EACd,mCAAmC,CAAC,MAAM,GAAG,CAAC;gCAC5C,CAAC,CAAC,EAAE,QAAQ,EAAE,6BAA6B,mCAAmC,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE;gCAC5G,CAAC,CAAC,KAAK;yBACZ;wBACD,iBAAiB,EAAE,IAAI;qBACxB,CAAC;;gBAEA,qBAAqB,CAAC,IAAI;gBAC1B,qBAAqB,CAAC,KAAK;;sCAEL,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC1E,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;WAC5E;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,2BAA2B,CAAC,KAAiD;QACzF,OAAO,CACL,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,IAAI,KAAK,CAAC,UAAU,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9I,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACzF,CAAC,CACH,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,IAAI,KAAK,EAA4B,CAAC,CAAC;IACzG,CAAC;IAEO,KAAK,CAAC,wBAAwB,CAAC,EACrC,qBAAqB,EAAE,WAAW,EAClC,cAAc,GAC6B;QAC3C,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC;YAC/E,MAAM,EAAE,cAAc;YACtB,YAAY,EAAE,EAAE,QAAQ,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,EAAE;SAClE,CAAC,CAAC;QAEH,OAAO;YACL;gBACE,aAAa,EAAE,sBAAsB;gBACrC,KAAK,EAAE;oBACL,KAAK,EAAE;;gBAED,MAAM,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC;wBAClD,SAAS,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE;wBACzC,YAAY,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE;wBAC/C,SAAS,EAAE;4BACT,QAAQ,EAAE,MAAM,IAAI,CAAC,6BAA6B,CAAC,kBAAkB,CAAC;gCACpE,UAAU,EAAE,MAAM;gCAClB,SAAS,EAAE,sBAAsB;6BAClC,CAAC;yBACH;wBACD,YAAY,EAAE;4BACZ,UAAU,EAAE,EAAE,QAAQ,EAAE,gCAAgC,EAAE;4BAC1D,aAAa,EAAE,IAAI;4BACnB,OAAO,EAAE,qBAAqB;yBAC/B;wBACD,iBAAiB,EAAE,KAAK;qBACzB,CAAC;mBACG,qBAAqB,CAAC,IAAI;cAC/B,qBAAqB,CAAC,KAAK;;0DAEiB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC/D,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;WAC5E;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,2BAA2B,CAAC,EACxC,qBAAqB,EAAE,WAAW,EAClC,cAAc,EACd,UAAU,GACiC;QAC3C,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC;YAC/E,MAAM,EAAE,cAAc;YACtB,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EAAE,KAAK,EAAE,MAAM,EAAE;SACtE,CAAC,CAAC;QACH,MAAM,QAAQ,GAAc,UAAU,CAAC,YAAY,EAAE,oBAAoB;YACvE,CAAC,CAAC,sBAAsB,CAAC,UAAU,CAAC,YAAY,EAAE,QAAQ,CAAC;YAC3D,CAAC,CAAC,MAAM,cAAc,CAClB,IAAI,CAAC,SAAS,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC,IAAI,CACzD,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,EACtC,QAAQ,EAAE,EACV,OAAO,EAAE,CACV,CACF,CAAC;QAEN,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,eAAe,GAAG,MAAM,cAAc,CAC1C,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CACjB,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,4BAA4B,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,EACxF,MAAM,CAAC,CAAC,GAAG,EAAE,oBAAoB,EAAE,EAAE;YACnC,OAAO,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC1C,CAAC,EAAE,IAAI,KAAK,EAAa,CAAC,CAC3B,CACF,CAAC;QAEF,OAAO;YACL;gBACE,aAAa,EAAE,IAAI,CAAC,qBAAqB;gBACzC,KAAK,EAAE;oBACL,KAAK,EAAE;;cAEH,MAAM,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC;wBAClD,SAAS,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE;wBACzC,YAAY,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE;wBAC/C,SAAS,EAAE;4BACT,QAAQ,EAAE,MAAM,IAAI,CAAC,6BAA6B,CAAC,kBAAkB,CAAC;gCACpE,UAAU,EAAE,MAAM;gCAClB,SAAS,EAAE,IAAI,CAAC,qBAAqB;6BACtC,CAAC;yBACH;wBACD,WAAW,EAAE;4BACX,QAAQ,EAAE;;sBAEJ,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO;;;;6BAIjF,IAAI,CAAC,qBAAqB;;;;;iBAKtC;yBACF;wBACD,QAAQ,EAAE;4BACR,OAAO,EAAE,IAAI;yBACd;wBACD,YAAY,EAAE;4BACZ,OAAO,EAAE,EAAE,QAAQ,EAAE,wBAAwB,EAAE;4BAC/C,UAAU,EAAE,EAAE,QAAQ,EAAE,2BAA2B,EAAE;4BACrD,OAAO,EAAE,WAAW;4BACpB,SAAS,EAAE,IAAI;yBAChB;wBACD,iBAAiB,EAAE,IAAI;qBACxB,CAAC;iBACG,qBAAqB,CAAC,IAAI;YAC/B,UAAU,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,sCAAsC,0CAA0C;YAC7I,qBAAqB,CAAC,KAAK;;mCAEJ,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;oCACpB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;;cAExC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;WAC1E;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,0BAA0B,CAAC,EACvC,qBAAqB,EAAE,UAAU,EACjC,cAAc,GAC6B;QAC3C,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC;YAC/E,MAAM,EAAE,cAAc;YACtB,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EAAE,KAAK,EAAE,MAAM,EAAE;SACtE,CAAC,CAAC;QACH,OAAO;YACL;gBACE,aAAa,EAAE,IAAI,CAAC,qBAAqB;gBACzC,KAAK,EAAE;oBACL,KAAK,EAAE;;gBAED,MAAM,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC;wBAClD,SAAS,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE;wBACzC,YAAY,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE;wBAC/C,SAAS,EAAE;4BACT,QAAQ,EAAE,MAAM,IAAI,CAAC,6BAA6B,CAAC,kBAAkB,CAAC;gCACpE,UAAU,EAAE,MAAM;gCAClB,SAAS,EAAE,IAAI,CAAC,qBAAqB;6BACtC,CAAC;yBACH;wBACD,WAAW,EAAE;4BACX,QAAQ,EAAE;;;6BAGC,IAAI,CAAC,qBAAqB;6BAC1B,gBAAgB;;;;mBAI1B;yBACF;wBACD,QAAQ,EAAE;4BACR,OAAO,EAAE,IAAI;yBACd;wBACD,YAAY,EAAE;4BACZ,OAAO,EAAE,EAAE,QAAQ,EAAE,wBAAwB,EAAE;4BAC/C,UAAU,EAAE,EAAE,QAAQ,EAAE,2BAA2B,EAAE;4BACrD,OAAO,EAAE,WAAW;4BACpB,SAAS,EAAE,IAAI;yBAChB;wBACD,iBAAiB,EAAE,IAAI;qBACxB,CAAC;mBACG,qBAAqB,CAAC,IAAI;cAC/B,qBAAqB,CAAC,KAAK;;mCAEN,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;gBACvC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;WAC5E;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,KAA2D;QACpG,MAAM,aAAa,GAAG,yCAAyC,CAAC,EAAE,uBAAuB,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QACjH,OAAO,uCAAuC,CAAC;YAC7C,GAAG,KAAK;YACR,aAAa;YACb,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE;YACpD,aAAa,EAAE,IAAI,CAAC,cAAc;SACnC,CAAC,CAAC;IACL,CAAC;;AAGH,KAAK,UAAU,uCAAuC,CACpD,KAGC;IAED,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IAC1I,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAEnE,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEvD,MAAM,0BAA0B,GAAG,sBAAsB,CAAC;IAC1D,MAAM,wBAAwB,GAAG,oBAAoB,CAAC;IACtD,MAAM,6BAA6B,GAAG,yBAAyB,CAAC;IAChE,MAAM,qCAAqC,GAAG,gCAAgC,CAAC;IAE/E,OAAO,aAAa,CAClB,QAAQ;SACL,uCAAuC,CAAC;QACvC,YAAY,EAAE,KAAK,CAAC,eAAe,CAAC,mBAAmB;KACxD,CAAC;SACD,IAAI,CACH,QAAQ,CAAC,KAAK,EAAE,EAAE,oBAAoB,EAAE,UAAU,EAAE,EAAE,EAAE;QACtD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,CAAC,yBAAyB,EAAE,4BAA4B,EAAE,wBAAwB,EAAE,oCAAoC,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CACjJ,CAAC,aAAa,EAAE,sBAAsB,EAAE,YAAY,EAAE,GAAG,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CACrI,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CACzF,CACF,CAAC;QACF,MAAM,IAAI,GAAG;YACX,GAAG,0BAA0B;;;;;gBAKzB,yBAAyB;;gBAEzB,aAAa;qBACR,sBAAsB;;sCAEL,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;YAE/C;YACA,GAAG,CAAC,eAAe,CAAC,YAAY;gBAC9B,CAAC,CAAC;oBACE,GAAG,wBAAwB;;;;;sBAKvB,wBAAwB;;sBAExB,YAAY;2BACP,gBAAgB;;;+CAGI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;kBAClD;iBACD;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,eAAe,CAAC,iBAAiB;gBACnC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACE,GAAG,6BAA6B;;;;;oBAK9B,4BAA4B;;oBAE5B,sBAAsB;;;2CAGC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChD;iBACC,CAAC;YACN,GAAG,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC;gBACjC,CAAC,CAAC;oBACE,GAAG,qCAAqC;;;;oBAItC,oCAAoC;;oBAEpC,8BAA8B;;0CAER,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;gBACzD;iBACC;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QACF,MAAM,KAAK,GAAG;;;;;;cAMV,0BAA0B;;;YAI5B,eAAe,CAAC,YAAY;YAC1B,CAAC,CAAC;;;;;;oBAMI,wBAAwB;;;eAG7B;YACD,CAAC,CAAC,EACN;YAEE,eAAe,CAAC,iBAAiB;YAC/B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;;;;;;oBAMI,0BAA0B;yBACrB,6BAA6B;;;;eAK5C;YAEE,oBAAoB,CAAC,MAAM,GAAG,CAAC;YAC7B,CAAC,CAAC;;;;;;oBAMI,qCAAqC;;;eAG1C;YACD,CAAC,CAAC,EACN;;UAEA,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,6BAA6B,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;OACrH,CAAC;QACE,MAAM,QAAQ,GAAG;YACf,EAAE,IAAI,EAAE,QAAiB,EAAE,KAAK,EAAE,aAAa,EAAE;YACjD,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAiB,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5F,GAAG,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAiB,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;YACjG,GAAG,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAiB,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAChG,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IACnC,CAAC,CAAC,EACF,QAAQ,CAAC,CAAC,UAAU,EAAE,EAAE;QACtB,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,UAAU,EAAE,EAAE,YAAY,EAAE,GAAG,aAAa,IAAI,WAAW,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CACtI,uBAAuB,CACxB,CAAC;IACJ,CAAC,CAAC,EACF,6BAA6B,CAAC,IAAI,CAAC,EACnC,GAAG,CAAC,CAAC,GAAG,EAAe,EAAE;QACvB,IAAI,SAAiB,CAAC;QACtB,QAAQ,GAAG,CAAC,SAAS,EAAE,CAAC;YACtB,KAAK,GAAG;gBACN,SAAS,GAAG,aAAa,CAAC;gBAC1B,MAAM;YACR,KAAK,IAAI;gBACP,SAAS,GAAG,sBAAsB,CAAC;gBACnC,MAAM;YACR,KAAK,GAAG;gBACN,SAAS,GAAG,YAAY,CAAC;gBACzB,MAAM;YACR;gBACE,SAAS,GAAG,8BAA8B,CAAC;gBAC3C,MAAM;QACV,CAAC;QACD,OAAO;YACL,SAAS;YACT,EAAE,EAAE,GAAG,CAAC,YAAY;SACrB,CAAC;IACJ,CAAC,CAAC,EACF,OAAO,EAAE,EACT,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,qCAAqC,CAAC,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,EAC3F,OAAO,EAAE,EACT,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EACnE,cAAc,CAAC,EAAE,CAAC,CACnB,CACJ,CAAC;AACJ,CAAC;AAED,SAAS,qCAAqC,CAAC,EAC7C,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,KAAK,EACL,WAAW,EACX,aAAa,GAId;IACC,IAAI,KAAK,KAAK,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,KAAK,IAAI,6BAA6B,CAAC,EAAE,CAAC;QAC3F,MAAM,IAAI,wBAAwB,CAAC,KAAK,IAAI,6BAA6B,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,EAAE,aAAa,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACrD,OAAO,eAAe,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CACvE,MAAM,CACJ,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACzB,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;YAChC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzB,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,SAAS,KAAK,8BAA8B,EAAE,CAAC;YACjD,GAAG,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpC,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,SAAS,KAAK,sBAAsB,EAAE,CAAC;YACzC,IAAI,eAAe,CAAC,iBAAiB,EAAE,CAAC;gBACtC,OAAO,GAAG,CAAC;YACb,CAAC;YACD,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5B,OAAO,GAAG,CAAC;QACb,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;YAClC,OAAO,GAAG,CAAC;QACb,CAAC;QACD,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,GAAG,CAAC;IACb,CAAC,EACD;QACE,sBAAsB,EAAE,IAAI,KAAK,EAAyB;QAC1D,WAAW,EAAE,IAAI,KAAK,EAAc;QACpC,cAAc,EAAE,IAAI,KAAK,EAAiB;QAC1C,UAAU,EAAE,IAAI,KAAK,EAAa;KACnC,CACF,EACD,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE;QACf,MAAM,cAAc,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;QAC7C,OAAO,KAAK,CACV,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,sBAAsB,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAC/E,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,qBAAqB,EAAE,EAAE,EAAE,CAAC,CAAC,EAC7E,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CACrD,EACD,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CACpE,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,EAClE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CACrD,EACD,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,cAAc,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CACvE,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC,EACrE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CACrD,EACD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CACvB,WAAW,CAAC,mBAAmB,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,EACvF,6BAA6B,CAAC,CAAC,CAAC,EAChC,QAAQ,CACN,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CACpB,sCAAsC,CAAC;YACrC,YAAY;YACZ,QAAQ;YACR,eAAe;YACf,QAAQ;YACR,WAAW,EAAE,KAAK;YAClB,UAAU;YACV,WAAW;YACX,aAAa;SACd,CAAC,EACJ,EAAE,CACH,CACF,CACF,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,sCAAsC,CAAC,KAS/C;IACC,MAAM,SAAS,GAAG,GAAG,CAAC;IACtB,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACzH,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC/E,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;QAC9D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,EAAE;QAChB,MAAM,IAAI,GAAG;YACX;;;;;;gBAMU,SAAS,sDAAsD,SAAS,IAAI,SAAS,sDAAsD,SAAS,IAAI,SAAS;gBACjK,SAAS;;eAEV,YAAY;oBACP,UAAU;oBACV,aAAa;mCACE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;;;;;;;;;gBASxC,SAAS,sDAAsD,SAAS,IAAI,SAAS,sDAAsD,SAAS,IAAI,SAAS,uDAAuD,SAAS;gBACjO,SAAS,uDAAuD,SAAS;;;eAG1E,YAAY;oBACP,UAAU;oBACV,aAAa;QACzB;SACH,CAAC;QACF,MAAM,KAAK,GAAG;;;;KAIb,CAAC;QAEF,OAAO,YAAY,CAAC,iBAAiB,CACnC,EAAE,IAAI,EAAE,KAAK,EAAE,EACf,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,aAAa,IAAI,WAAW,kBAAkB,UAAU,EAAE,EAAE,CAC1H,CAAC;IACJ,CAAC,CAAC,CAAC,IAAI,CACL,uBAAuB,EACvB,6BAA6B,CAAC,GAAG,CAAC,EAClC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,EACpF,QAAQ,CAAC,CAAC,oBAAoB,EAAE,EAAE,CAChC,QAAQ,CAAC,EAAE,oBAAoB,EAAE,EAAE,CAAC,oBAAoB,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CACvJ,EACD,GAAG,CAAC,CAAC,EAAE,oBAAoB,EAAE,cAAc,EAAE,EAAE,EAAE;QAC/C,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,6DAA6D;QACnF,MAAM,IAAI,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,oBAAoB,CAAC,CAAC;QAC1D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;IAC7C,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,GAAkB,EAAE,SAAiB,EAAE,gBAAwB,EAAE,iBAAyB,EAAE,cAAsB;IACvI,MAAM,WAAW,GAAa,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,IAAI,KAAK,EAAe,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,QAAQ,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YACvB,KAAK,GAAG;gBACN,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;gBACnE,MAAM;YACR,KAAK,GAAG;gBACN,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;gBACpE,MAAM;YACR,KAAK,GAAG;gBACN,iDAAiD;gBACjD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBACZ,MAAM;gBACR,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;gBACjE,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport {\n bufferCount,\n defaultIfEmpty,\n defer,\n distinct,\n EMPTY,\n firstValueFrom,\n forkJoin,\n from,\n fromEvent,\n identity,\n lastValueFrom,\n map,\n merge,\n mergeMap,\n of,\n reduce,\n takeUntil,\n toArray,\n} from \"rxjs\";\nimport { assert, Guid } from \"@itwin/core-bentley\";\nimport { createNodesQueryClauseFactory, createPredicateBasedHierarchyDefinition, ProcessedHierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { createBisInstanceLabelSelectClauseFactory, ECSql } from \"@itwin/presentation-shared\";\nimport {\n CLASS_NAME_DefinitionContainer,\n CLASS_NAME_InformationPartitionElement,\n CLASS_NAME_ISubModeledElement,\n CLASS_NAME_Model,\n CLASS_NAME_SubCategory,\n} from \"../common/internal/ClassNameDefinitions.js\";\nimport { catchBeSQLiteInterrupts } from \"../common/internal/UseErrorState.js\";\nimport {\n createIdsSelector,\n fromWithRelease,\n getClassesByView,\n getOptimalBatchSize,\n groupingNodeHasSearchTargets,\n parseIdsSelectorResult,\n releaseMainThreadOnItemsCount,\n} from \"../common/internal/Utils.js\";\nimport { SearchLimitExceededError } from \"../common/TreeErrors.js\";\n\nimport type { Observable } from \"rxjs\";\nimport type { GuidString, Id64Array, MarkRequired } from \"@itwin/core-bentley\";\nimport type {\n DefineHierarchyLevelProps,\n DefineInstanceNodeChildHierarchyLevelProps,\n DefineRootHierarchyLevelProps,\n GenericInstanceFilter,\n HierarchyDefinition,\n HierarchyLevelDefinition,\n HierarchyNodesDefinition,\n LimitingECSqlQueryExecutor,\n NodePreProcessor,\n NodesQueryClauseFactory,\n} from \"@itwin/presentation-hierarchies\";\nimport type {\n ECClassHierarchyInspector,\n ECSchemaProvider,\n ECSqlBinding,\n ECSqlQueryRow,\n IInstanceLabelSelectClauseFactory,\n InstanceKey,\n} from \"@itwin/presentation-shared\";\nimport type { CategoryId, DefinitionContainerId, ElementId, ModelId, SubCategoryId } from \"../common/internal/Types.js\";\nimport type { NormalizedHierarchySearchPath } from \"../common/Utils.js\";\nimport type { CategoriesTreeIdsCache, CategoryInfo } from \"./internal/CategoriesTreeIdsCache.js\";\n\nconst MAX_SEARCH_INSTANCE_KEY_COUNT = 100;\n\ninterface CategoriesTreeDefinitionProps {\n imodelAccess: ECSchemaProvider & ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n viewType: \"2d\" | \"3d\";\n idsCache: CategoriesTreeIdsCache;\n hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n}\n\ninterface CategoriesTreeInstanceKeyPathsFromInstanceLabelProps {\n imodelAccess: ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n label: string;\n viewType: \"2d\" | \"3d\";\n limit?: number | \"unbounded\";\n idsCache: CategoriesTreeIdsCache;\n hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n abortSignal?: AbortSignal;\n componentId?: GuidString;\n}\n\n/**\n * Defines hierarchy configuration supported by `CategoriesTree`.\n * @beta\n */\nexport interface CategoriesTreeHierarchyConfiguration {\n /** Should SubCategories be hidden. Defaults to `false` */\n hideSubCategories: boolean;\n /** Should Elements be shown. Defaults to `false` */\n showElements: boolean;\n /** Should categories without elements be shown. Defaults to `false`. */\n showEmptyCategories: boolean;\n}\n\n/** @internal */\nexport const defaultHierarchyConfiguration: CategoriesTreeHierarchyConfiguration = {\n hideSubCategories: false,\n showElements: false,\n showEmptyCategories: false,\n};\n\n/** @internal */\nexport class CategoriesTreeDefinition implements HierarchyDefinition {\n #impl: Promise<HierarchyDefinition> | undefined;\n #selectQueryFactory: NodesQueryClauseFactory;\n #nodeLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory;\n #idsCache: CategoriesTreeIdsCache;\n #hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n #iModelAccess: ECSchemaProvider & ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n #categoryClass: string;\n #categoryElementClass: string;\n #categoryModelClass: string;\n static #componentName = \"CategoriesTreeDefinition\";\n\n public constructor(props: CategoriesTreeDefinitionProps) {\n this.#iModelAccess = props.imodelAccess;\n this.#idsCache = props.idsCache;\n this.#nodeLabelSelectClauseFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: props.imodelAccess });\n this.#selectQueryFactory = createNodesQueryClauseFactory({\n imodelAccess: props.imodelAccess,\n instanceLabelSelectClauseFactory: this.#nodeLabelSelectClauseFactory,\n });\n this.#hierarchyConfig = props.hierarchyConfig;\n const { categoryClass, elementClass, modelClass } = getClassesByView(props.viewType);\n this.#categoryClass = categoryClass;\n this.#categoryElementClass = elementClass;\n this.#categoryModelClass = modelClass;\n }\n\n public preProcessNode: NodePreProcessor = async (node) => {\n if (node.extendedData?.isCategory) {\n return {\n ...node,\n extendedData: {\n ...node.extendedData,\n modelIds: parseIdsSelectorResult(node.extendedData.modelIds),\n },\n };\n }\n return node;\n };\n\n public async postProcessNode(node: ProcessedHierarchyNode): Promise<ProcessedHierarchyNode> {\n if (ProcessedHierarchyNode.isGroupingNode(node)) {\n const modelElementsMap = new Map<ModelId, Set<ElementId>>();\n node.children.forEach((child) => {\n let modelEntry = modelElementsMap.get(child.extendedData?.modelId);\n if (!modelEntry) {\n modelEntry = new Set();\n modelElementsMap.set(child.extendedData?.modelId, modelEntry);\n }\n assert(child.key.type === \"instances\");\n for (const { id } of child.key.instanceKeys) {\n modelEntry.add(id);\n }\n });\n\n const { hasSearchTargetAncestor, hasDirectNonSearchTargets } = groupingNodeHasSearchTargets(node.children);\n\n return {\n ...node,\n label: node.label,\n extendedData: {\n ...node.extendedData,\n // add `categoryId` from the first grouped element\n categoryId: node.children[0].extendedData?.categoryId,\n modelElementsMap,\n ...(hasDirectNonSearchTargets ? { hasDirectNonSearchTargets } : {}),\n ...(hasSearchTargetAncestor ? { hasSearchTargetAncestor } : {}),\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 private async getHierarchyDefinition(): Promise<HierarchyDefinition> {\n this.#impl ??= (async () => {\n const isDefinitionContainerSupported = await firstValueFrom(this.#idsCache.getIsDefinitionContainerSupported());\n return createPredicateBasedHierarchyDefinition({\n classHierarchyInspector: this.#iModelAccess,\n hierarchy: {\n rootNodes: async (requestProps: DefineRootHierarchyLevelProps) => this.createDefinitionContainersAndCategoriesQuery(requestProps),\n childNodes: [\n ...(this.#hierarchyConfig.showElements\n ? [\n {\n parentInstancesNodePredicate: this.#categoryElementClass,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createElementChildrenQuery(requestProps),\n },\n {\n parentInstancesNodePredicate: CLASS_NAME_ISubModeledElement,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createISubModeledElementChildrenQuery(requestProps),\n },\n {\n parentInstancesNodePredicate: this.#categoryModelClass,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createGeometricModel3dChildrenQuery(requestProps),\n },\n ]\n : []),\n ...(this.#hierarchyConfig.hideSubCategories && !this.#hierarchyConfig.showElements\n ? []\n : [\n {\n parentInstancesNodePredicate: this.#categoryClass,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createCategoryChildrenQuery(requestProps),\n },\n ]),\n ...(isDefinitionContainerSupported\n ? [\n {\n parentInstancesNodePredicate: CLASS_NAME_DefinitionContainer,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) =>\n this.createDefinitionContainersAndCategoriesQuery(requestProps),\n },\n ]\n : []),\n ],\n },\n });\n })();\n return this.#impl;\n }\n\n public async defineHierarchyLevel(props: DefineHierarchyLevelProps) {\n return (await this.getHierarchyDefinition()).defineHierarchyLevel(props);\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: this.#categoryModelClass,\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 hasChildren: true,\n extendedData: {\n isModel: true,\n },\n })}\n FROM ${this.#categoryModelClass} 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.#categoryElementClass})\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: this.#categoryClass, alias: \"this\" },\n });\n\n return [\n {\n fullClassName: this.#categoryClass,\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.#categoryClass,\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 isCategoryOfSubModel: true,\n },\n supportsFiltering: true,\n })}\n FROM ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n EXISTS (\n SELECT 1\n FROM ${this.#categoryElementClass} element\n WHERE\n element.Model.Id IN (${modelIds.join(\",\")})\n AND element.Category.Id = +this.ECInstanceId\n AND element.Parent.Id IS NULL\n )\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n private async createDefinitionContainersAndCategoriesQuery(props: {\n parentNodeInstanceIds?: Id64Array;\n instanceFilter?: GenericInstanceFilter;\n }): Promise<HierarchyLevelDefinition> {\n const { parentNodeInstanceIds, instanceFilter } = props;\n const { definitionContainers, categories } = await firstValueFrom(\n parentNodeInstanceIds === undefined\n ? this.#idsCache.getRootDefinitionContainersAndCategories({ includeEmpty: this.#hierarchyConfig.showEmptyCategories })\n : this.#idsCache.getDirectChildDefinitionContainersAndCategories({\n parentDefinitionContainerIds: parentNodeInstanceIds,\n includeEmpty: this.#hierarchyConfig.showEmptyCategories,\n }),\n );\n const hierarchyDefinition = new Array<HierarchyNodesDefinition>();\n if (categories.length > 0) {\n hierarchyDefinition.push(...(await this.createCategoriesQuery({ categories, instanceFilter })));\n }\n if (definitionContainers.length > 0) {\n hierarchyDefinition.push(...(await this.createDefinitionContainersQuery({ definitionContainerIds: definitionContainers, instanceFilter })));\n }\n return hierarchyDefinition;\n }\n\n private async createDefinitionContainersQuery({\n definitionContainerIds,\n instanceFilter,\n }: {\n definitionContainerIds: Id64Array;\n instanceFilter?: GenericInstanceFilter;\n }): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: CLASS_NAME_DefinitionContainer, alias: \"this\" },\n });\n\n return [\n {\n fullClassName: CLASS_NAME_DefinitionContainer,\n query: {\n ecsql: `\n SELECT\n ${await this.#selectQueryFactory.createSelectClause({\n ecClassId: { selector: ECSql.createRawPropertyValueSelector(\"this\", \"ECClassId\") },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: CLASS_NAME_DefinitionContainer,\n }),\n },\n extendedData: {\n isDefinitionContainer: true,\n imageId: \"icon-definition-container\",\n },\n hasChildren: true,\n supportsFiltering: true,\n })}\n FROM\n ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n this.ECInstanceId IN (${definitionContainerIds.join(\", \")})\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n private async createCategoriesQuery({\n categories,\n instanceFilter,\n }: {\n categories: Array<CategoryInfo>;\n instanceFilter?: GenericInstanceFilter;\n }): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: this.#categoryClass, alias: \"this\" },\n });\n const categoriesWithMultipleSubCategories = categories\n .filter((categoryInfo) => categoryInfo.subCategoryChildCount > 1)\n .map((categoryInfo) => categoryInfo.id);\n\n const hasChildrenSelector = () => {\n const conditions = new Array<string>();\n if (!this.#hierarchyConfig.hideSubCategories && categoriesWithMultipleSubCategories.length > 0) {\n conditions.push(`this.ECInstanceId IN (${categoriesWithMultipleSubCategories.join(\",\")})`);\n }\n if (this.#hierarchyConfig.showElements) {\n conditions.push(`\n this.ECInstanceId IN (\n SELECT e.Category.Id\n FROM ${this.#categoryElementClass} e\n WHERE\n e.Parent.Id IS NULL\n AND e.ECInstanceId NOT IN (SELECT m.ECInstanceId FROM ${this.#categoryModelClass} m)\n )`);\n }\n return conditions.length > 0\n ? {\n selector: `IIF(${conditions.join(\" OR \")}, 1, 0)`,\n }\n : false;\n };\n\n return [\n {\n fullClassName: this.#categoryClass,\n query: {\n ecsql: `\n SELECT\n ${await this.#selectQueryFactory.createSelectClause({\n ecClassId: { selector: ECSql.createRawPropertyValueSelector(\"this\", \"ECClassId\") },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: this.#categoryClass,\n }),\n },\n hasChildren: hasChildrenSelector(),\n extendedData: {\n description: { selector: \"this.Description\" },\n isCategory: true,\n imageId: \"icon-layers\",\n hasSubCategories:\n categoriesWithMultipleSubCategories.length > 0\n ? { selector: `IIF(this.ECInstanceId IN (${categoriesWithMultipleSubCategories.join(\",\")}), true, false) ` }\n : false,\n },\n supportsFiltering: true,\n })}\n FROM\n ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n this.ECInstanceId IN (${categories.map((category) => category.id).join(\", \")})\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n private async createCategoryChildrenQuery(props: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n return (\n await Promise.all([\n ...(!this.#hierarchyConfig.hideSubCategories && props.parentNode.extendedData?.hasSubCategories ? [this.createSubCategoriesQuery(props)] : []),\n ...(this.#hierarchyConfig.showElements ? [this.createCategoryElementsQuery(props)] : []),\n ])\n ).reduce((acc, levelDefinition) => acc.concat(levelDefinition), new Array<HierarchyNodesDefinition>());\n }\n\n private async createSubCategoriesQuery({\n parentNodeInstanceIds: categoryIds,\n instanceFilter,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: CLASS_NAME_SubCategory, alias: \"this\" },\n });\n\n return [\n {\n fullClassName: CLASS_NAME_SubCategory,\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: CLASS_NAME_SubCategory,\n }),\n },\n extendedData: {\n categoryId: { selector: \"printf('0x%x', this.Parent.Id)\" },\n isSubCategory: true,\n imageId: \"icon-layers-isolate\",\n },\n supportsFiltering: false,\n })}\n FROM ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n NOT this.IsPrivate AND this.Parent.Id IN (${categoryIds.join(\",\")})\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n private async createCategoryElementsQuery({\n parentNodeInstanceIds: categoryIds,\n instanceFilter,\n parentNode,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: this.#categoryElementClass, alias: \"this\" },\n });\n const modelIds: Id64Array = parentNode.extendedData?.isCategoryOfSubModel\n ? parseIdsSelectorResult(parentNode.extendedData?.modelIds)\n : await firstValueFrom(\n this.#idsCache.getCategoriesElementModels(categoryIds).pipe(\n mergeMap(({ models }) => models ?? []),\n distinct(),\n toArray(),\n ),\n );\n\n if (modelIds.length === 0) {\n return [];\n }\n const modeledElements = await firstValueFrom(\n from(modelIds).pipe(\n mergeMap((modelId) => this.#idsCache.getCategoriesModeledElements(modelId, categoryIds)),\n reduce((acc, foundModeledElements) => {\n return acc.concat(foundModeledElements);\n }, new Array<ElementId>()),\n ),\n );\n\n return [\n {\n fullClassName: this.#categoryElementClass,\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.#categoryElementClass,\n }),\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.#categoryElementClass} ce\n WHERE ce.Parent.Id = this.ECInstanceId\n LIMIT 1\n ), 0)\n )\n `,\n },\n grouping: {\n byClass: true,\n },\n extendedData: {\n modelId: { selector: \"IdToHex(this.Model.Id)\" },\n categoryId: { selector: \"IdToHex(this.Category.Id)\" },\n imageId: \"icon-item\",\n isElement: true,\n },\n supportsFiltering: true,\n })}\n FROM ${instanceFilterClauses.from} this\n ${parentNode.extendedData?.isCategoryOfSubModel ? \"\" : `JOIN ${CLASS_NAME_InformationPartitionElement} ipe ON ipe.ECInstanceId = this.Model.Id`}\n ${instanceFilterClauses.joins}\n WHERE\n this.Category.Id IN (${categoryIds.join(\",\")})\n AND this.Model.Id IN (${modelIds.join(\",\")})\n AND this.Parent.Id IS NULL\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n private async createElementChildrenQuery({\n parentNodeInstanceIds: elementIds,\n instanceFilter,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: this.#categoryElementClass, alias: \"this\" },\n });\n return [\n {\n fullClassName: this.#categoryElementClass,\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.#categoryElementClass,\n }),\n },\n hasChildren: {\n selector: `\n IFNULL((\n SELECT 1\n FROM ${this.#categoryElementClass} ce\n JOIN ${CLASS_NAME_Model} 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 grouping: {\n byClass: true,\n },\n extendedData: {\n modelId: { selector: \"IdToHex(this.Model.Id)\" },\n categoryId: { selector: \"IdToHex(this.Category.Id)\" },\n imageId: \"icon-item\",\n isElement: true,\n },\n supportsFiltering: true,\n })}\n FROM ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n this.Parent.Id IN (${elementIds.join(\",\")})\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n public static async createInstanceKeyPaths(props: CategoriesTreeInstanceKeyPathsFromInstanceLabelProps): Promise<NormalizedHierarchySearchPath[]> {\n const labelsFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: props.imodelAccess });\n return createInstanceKeyPathsFromInstanceLabel({\n ...props,\n labelsFactory,\n componentId: props.componentId ?? Guid.createValue(),\n componentName: this.#componentName,\n });\n }\n}\n\nasync function createInstanceKeyPathsFromInstanceLabel(\n props: MarkRequired<CategoriesTreeInstanceKeyPathsFromInstanceLabelProps, \"componentId\"> & {\n labelsFactory: IInstanceLabelSelectClauseFactory;\n componentName: string;\n },\n): Promise<NormalizedHierarchySearchPath[]> {\n const { idsCache, abortSignal, label, viewType, labelsFactory, limit, hierarchyConfig, imodelAccess, componentId, componentName } = props;\n const { categoryClass, elementClass } = getClassesByView(viewType);\n\n const adjustedLabel = label.replace(/[%_\\\\]/g, \"\\\\$&\");\n\n const CATEGORIES_WITH_LABELS_CTE = \"CategoriesWithLabels\";\n const ELEMENTS_WITH_LABELS_CTE = \"ElementsWithLabels\";\n const SUBCATEGORIES_WITH_LABELS_CTE = \"SubCategoriesWithLabels\";\n const DEFINITION_CONTAINERS_WITH_LABELS_CTE = \"DefinitionContainersWithLabels\";\n\n return lastValueFrom(\n idsCache\n .getAllDefinitionContainersAndCategories({\n includeEmpty: props.hierarchyConfig.showEmptyCategories,\n })\n .pipe(\n mergeMap(async ({ definitionContainers, categories }) => {\n if (categories.length === 0) {\n return undefined;\n }\n const [categoryLabelSelectClause, subCategoryLabelSelectClause, elementLabelSelectClause, definitionContainerLabelSelectClause] = await Promise.all(\n [categoryClass, CLASS_NAME_SubCategory, elementClass, ...(definitionContainers.length > 0 ? [CLASS_NAME_DefinitionContainer] : [])].map(\n async (className) => labelsFactory.createSelectClause({ classAlias: \"this\", className }),\n ),\n );\n const ctes = [\n `${CATEGORIES_WITH_LABELS_CTE}(ClassName, ECInstanceId, ChildCount, DisplayLabel) AS (\n SELECT\n 'c',\n this.ECInstanceId,\n COUNT(sc.ECInstanceId),\n ${categoryLabelSelectClause}\n FROM\n ${categoryClass} this\n JOIN ${CLASS_NAME_SubCategory} sc ON sc.Parent.Id = this.ECInstanceId\n WHERE\n this.ECInstanceId IN (${categories.join(\", \")})\n GROUP BY this.ECInstanceId\n )`,\n ...(hierarchyConfig.showElements\n ? [\n `${ELEMENTS_WITH_LABELS_CTE}(ClassName, ECInstanceId, ParentId, DisplayLabel) AS (\n SELECT\n 'e',\n this.ECInstanceId,\n this.Parent.Id,\n ${elementLabelSelectClause}\n FROM\n ${elementClass} this\n JOIN ${CLASS_NAME_Model} m ON this.Model.Id = m.ECInstanceId\n WHERE\n NOT m.IsPrivate\n AND this.Category.Id IN (${categories.join(\", \")})\n )`,\n ]\n : []),\n ...(hierarchyConfig.hideSubCategories\n ? []\n : [\n `${SUBCATEGORIES_WITH_LABELS_CTE}(ClassName, ECInstanceId, ParentId, DisplayLabel) AS (\n SELECT\n 'sc',\n this.ECInstanceId,\n this.Parent.Id,\n ${subCategoryLabelSelectClause}\n FROM\n ${CLASS_NAME_SubCategory} this\n WHERE\n NOT this.IsPrivate\n AND this.Parent.Id IN (${categories.join(\", \")})\n )`,\n ]),\n ...(definitionContainers.length > 0\n ? [\n `${DEFINITION_CONTAINERS_WITH_LABELS_CTE}(ClassName, ECInstanceId, DisplayLabel) AS (\n SELECT\n 'dc',\n this.ECInstanceId,\n ${definitionContainerLabelSelectClause}\n FROM\n ${CLASS_NAME_DefinitionContainer} this\n WHERE\n this.ECInstanceId IN (${definitionContainers.join(\", \")})\n )`,\n ]\n : []),\n ];\n const ecsql = `\n SELECT * FROM (\n SELECT\n c.ClassName AS ClassName,\n c.ECInstanceId AS ECInstanceId\n FROM\n ${CATEGORIES_WITH_LABELS_CTE} c\n WHERE\n c.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\\\'\n ${\n hierarchyConfig.showElements\n ? `\n UNION ALL\n SELECT\n e.ClassName AS ClassName,\n e.ECInstanceId AS ECInstanceId\n FROM\n ${ELEMENTS_WITH_LABELS_CTE} e\n WHERE\n e.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\\\'\n `\n : \"\"\n }\n ${\n hierarchyConfig.hideSubCategories\n ? \"\"\n : `\n UNION ALL\n SELECT\n sc.ClassName AS ClassName,\n sc.ECInstanceId AS ECInstanceId\n FROM\n ${CATEGORIES_WITH_LABELS_CTE} c\n JOIN ${SUBCATEGORIES_WITH_LABELS_CTE} sc ON sc.ParentId = c.ECInstanceId\n WHERE\n c.ChildCount > 1\n AND sc.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\\\'\n `\n }\n ${\n definitionContainers.length > 0\n ? `\n UNION ALL\n SELECT\n dc.ClassName AS ClassName,\n dc.ECInstanceId AS ECInstanceId\n FROM\n ${DEFINITION_CONTAINERS_WITH_LABELS_CTE} dc\n WHERE\n dc.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\\\'\n `\n : \"\"\n }\n )\n ${limit === undefined ? `LIMIT ${MAX_SEARCH_INSTANCE_KEY_COUNT + 1}` : limit !== \"unbounded\" ? `LIMIT ${limit}` : \"\"}\n `;\n const bindings = [\n { type: \"string\" as const, value: adjustedLabel },\n ...(hierarchyConfig.showElements ? [{ type: \"string\" as const, value: adjustedLabel }] : []),\n ...(hierarchyConfig.hideSubCategories ? [] : [{ type: \"string\" as const, value: adjustedLabel }]),\n ...(definitionContainers.length > 0 ? [{ type: \"string\" as const, value: adjustedLabel }] : []),\n ];\n return { ctes, ecsql, bindings };\n }),\n mergeMap((queryProps) => {\n if (!queryProps) {\n return EMPTY;\n }\n return from(imodelAccess.createQueryReader(queryProps, { restartToken: `${componentName}/${componentId}/filter-by-label`, limit })).pipe(\n catchBeSQLiteInterrupts,\n );\n }),\n releaseMainThreadOnItemsCount(1000),\n map((row): InstanceKey => {\n let className: string;\n switch (row.ClassName) {\n case \"c\":\n className = categoryClass;\n break;\n case \"sc\":\n className = CLASS_NAME_SubCategory;\n break;\n case \"e\":\n className = elementClass;\n break;\n default:\n className = CLASS_NAME_DefinitionContainer;\n break;\n }\n return {\n className,\n id: row.ECInstanceId,\n };\n }),\n toArray(),\n mergeMap((targetItems) => createInstanceKeyPathsFromTargetItems({ ...props, targetItems })),\n toArray(),\n abortSignal ? takeUntil(fromEvent(abortSignal, \"abort\")) : identity,\n defaultIfEmpty([]),\n ),\n );\n}\n\nfunction createInstanceKeyPathsFromTargetItems({\n targetItems,\n imodelAccess,\n viewType,\n hierarchyConfig,\n idsCache,\n limit,\n componentId,\n componentName,\n}: MarkRequired<CategoriesTreeInstanceKeyPathsFromInstanceLabelProps, \"componentId\"> & {\n targetItems: InstanceKey[];\n componentName: string;\n}): Observable<NormalizedHierarchySearchPath> {\n if (limit !== \"unbounded\" && targetItems.length > (limit ?? MAX_SEARCH_INSTANCE_KEY_COUNT)) {\n throw new SearchLimitExceededError(limit ?? MAX_SEARCH_INSTANCE_KEY_COUNT);\n }\n const { categoryClass } = getClassesByView(viewType);\n return fromWithRelease({ source: targetItems, releaseOnCount: 500 }).pipe(\n reduce(\n (acc, { id, className }) => {\n if (className === categoryClass) {\n acc.categoryIds.push(id);\n return acc;\n }\n if (className === CLASS_NAME_DefinitionContainer) {\n acc.definitionContainerIds.push(id);\n return acc;\n }\n if (className === CLASS_NAME_SubCategory) {\n if (hierarchyConfig.hideSubCategories) {\n return acc;\n }\n acc.subCategoryIds.push(id);\n return acc;\n }\n\n if (!hierarchyConfig.showElements) {\n return acc;\n }\n acc.elementIds.push(id);\n return acc;\n },\n {\n definitionContainerIds: new Array<DefinitionContainerId>(),\n categoryIds: new Array<CategoryId>(),\n subCategoryIds: new Array<SubCategoryId>(),\n elementIds: new Array<ElementId>(),\n },\n ),\n mergeMap((ids) => {\n const elementsLength = ids.elementIds.length;\n return merge(\n fromWithRelease({ source: ids.definitionContainerIds, releaseOnCount: 200 }).pipe(\n mergeMap((id) => idsCache.getInstanceKeyPaths({ definitionContainerId: id })),\n map((path) => ({ path, options: { reveal: true } })),\n ),\n fromWithRelease({ source: ids.categoryIds, releaseOnCount: 200 }).pipe(\n mergeMap((id) => idsCache.getInstanceKeyPaths({ categoryId: id })),\n map((path) => ({ path, options: { reveal: true } })),\n ),\n fromWithRelease({ source: ids.subCategoryIds, releaseOnCount: 200 }).pipe(\n mergeMap((id) => idsCache.getInstanceKeyPaths({ subCategoryId: id })),\n map((path) => ({ path, options: { reveal: true } })),\n ),\n from(ids.elementIds).pipe(\n bufferCount(getOptimalBatchSize({ totalSize: elementsLength, maximumBatchSize: 5000 })),\n releaseMainThreadOnItemsCount(1),\n mergeMap(\n (block, chunkIndex) =>\n createGeometricElementInstanceKeyPaths({\n imodelAccess,\n idsCache,\n hierarchyConfig,\n viewType,\n targetItems: block,\n chunkIndex,\n componentId,\n componentName,\n }),\n 10,\n ),\n ),\n );\n }),\n );\n}\n\nfunction createGeometricElementInstanceKeyPaths(props: {\n imodelAccess: ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n idsCache: CategoriesTreeIdsCache;\n hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n viewType: \"2d\" | \"3d\";\n targetItems: Id64Array;\n componentId: GuidString;\n componentName: string;\n chunkIndex: number;\n}): Observable<NormalizedHierarchySearchPath> {\n const separator = \";\";\n const { targetItems, chunkIndex, componentId, componentName, hierarchyConfig, idsCache, imodelAccess, viewType } = props;\n const { categoryClass, elementClass, modelClass } = getClassesByView(viewType);\n if (targetItems.length === 0 || !hierarchyConfig.showElements) {\n return EMPTY;\n }\n\n return defer(() => {\n const ctes = [\n `CategoriesElementsHierarchy(ECInstanceId, ParentId, ModelId, Path) AS (\n SELECT\n e.ECInstanceId,\n e.Parent.Id,\n e.Model.Id,\n IIF(e.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([e].[ECInstanceId]) AS TEXT),\n 'e${separator}' || CAST(IdToHex([e].[ECInstanceId]) AS TEXT)\n )\n FROM ${elementClass} e\n LEFT JOIN ${modelClass} m ON (e.Parent.Id IS NULL AND m.ECInstanceId = e.Model.Id)\n LEFT JOIN ${categoryClass} c ON (e.Parent.Id IS NULL AND c.ECInstanceId = e.Category.Id)\n WHERE e.ECInstanceId IN (${targetItems.join(\",\")})\n\n UNION ALL\n\n SELECT\n pe.ECInstanceId,\n pe.Parent.Id,\n pe.Model.Id,\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 CategoriesElementsHierarchy ce\n JOIN ${elementClass} pe ON (pe.ECInstanceId = ce.ParentId OR pe.ECInstanceId = ce.ModelId AND ce.ParentId IS NULL)\n LEFT JOIN ${modelClass} m ON (pe.Parent.Id IS NULL AND m.ECInstanceId = pe.Model.Id)\n LEFT JOIN ${categoryClass} c ON (pe.Parent.Id IS NULL AND c.ECInstanceId = pe.Category.Id)\n )`,\n ];\n const ecsql = `\n SELECT mce.Path\n FROM CategoriesElementsHierarchy mce\n WHERE mce.ParentId IS NULL\n `;\n\n return imodelAccess.createQueryReader(\n { ctes, ecsql },\n { rowFormat: \"Indexes\", limit: \"unbounded\", restartToken: `${componentName}/${componentId}/element-paths/${chunkIndex}` },\n );\n }).pipe(\n catchBeSQLiteInterrupts,\n releaseMainThreadOnItemsCount(300),\n map((row) => parseQueryRow(row, separator, elementClass, categoryClass, modelClass)),\n mergeMap((elementHierarchyPath) =>\n forkJoin({ elementHierarchyPath: of(elementHierarchyPath), pathToCategory: idsCache.getInstanceKeyPaths({ categoryId: elementHierarchyPath[0].id }) }),\n ),\n map(({ elementHierarchyPath, pathToCategory }) => {\n pathToCategory.pop(); // category is already included in the element hierarchy path\n const path = [...pathToCategory, ...elementHierarchyPath];\n return { path, options: { reveal: true } };\n }),\n );\n}\n\nfunction parseQueryRow(row: ECSqlQueryRow, separator: string, elementClassName: string, categoryClassName: string, modelClassName: string) {\n const rowElements: string[] = row[0].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: categoryClassName, id: rowElements[i + 1] });\n break;\n case \"m\":\n // Ignore first model since it isn't in hierarchy\n if (i === 0) {\n break;\n }\n path.push({ className: modelClassName, id: rowElements[i + 1] });\n break;\n }\n }\n\n return path;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"CategoriesTreeDefinition.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport {\n bufferCount,\n defaultIfEmpty,\n defer,\n distinct,\n EMPTY,\n firstValueFrom,\n forkJoin,\n from,\n fromEvent,\n identity,\n lastValueFrom,\n map,\n merge,\n mergeAll,\n mergeMap,\n of,\n reduce,\n takeUntil,\n toArray,\n} from \"rxjs\";\nimport { assert, Guid } from \"@itwin/core-bentley\";\nimport { createNodesQueryClauseFactory, createPredicateBasedHierarchyDefinition, HierarchyNode, ProcessedHierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { createBisInstanceLabelSelectClauseFactory, ECSql } from \"@itwin/presentation-shared\";\nimport {\n CLASS_NAME_DefinitionContainer,\n CLASS_NAME_InformationPartitionElement,\n CLASS_NAME_ISubModeledElement,\n CLASS_NAME_Model,\n CLASS_NAME_SubCategory,\n} from \"../common/internal/ClassNameDefinitions.js\";\nimport { catchBeSQLiteInterrupts } from \"../common/internal/UseErrorState.js\";\nimport {\n createIdsSelector,\n fromWithRelease,\n getClassesByView,\n getOptimalBatchSize,\n groupingNodeDataFromChildren,\n parseIdsSelectorResult,\n releaseMainThreadOnItemsCount,\n} from \"../common/internal/Utils.js\";\nimport { SearchLimitExceededError } from \"../common/TreeErrors.js\";\n\nimport type { Observable } from \"rxjs\";\nimport type { GuidString, Id64Array, MarkRequired } from \"@itwin/core-bentley\";\nimport type {\n DefineHierarchyLevelProps,\n DefineInstanceNodeChildHierarchyLevelProps,\n DefineRootHierarchyLevelProps,\n GenericInstanceFilter,\n HierarchyDefinition,\n HierarchyLevelDefinition,\n HierarchyNodesDefinition,\n LimitingECSqlQueryExecutor,\n NodePreProcessor,\n NodesQueryClauseFactory,\n} from \"@itwin/presentation-hierarchies\";\nimport type {\n ECClassHierarchyInspector,\n ECSchemaProvider,\n ECSqlBinding,\n ECSqlQueryRow,\n IInstanceLabelSelectClauseFactory,\n InstanceKey,\n} from \"@itwin/presentation-shared\";\nimport type { CategoryId, DefinitionContainerId, ElementId, ModelId, SubCategoryId } from \"../common/internal/Types.js\";\nimport type { NormalizedHierarchySearchPath } from \"../common/Utils.js\";\nimport type { CategoriesTreeIdsCache, CategoryInfo } from \"./internal/CategoriesTreeIdsCache.js\";\n\nconst MAX_SEARCH_INSTANCE_KEY_COUNT = 100;\n\ninterface CategoriesTreeDefinitionProps {\n imodelAccess: ECSchemaProvider & ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n viewType: \"2d\" | \"3d\";\n idsCache: CategoriesTreeIdsCache;\n hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n}\n\ninterface CategoriesTreeInstanceKeyPathsFromInstanceLabelProps {\n imodelAccess: ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n label: string;\n viewType: \"2d\" | \"3d\";\n limit?: number | \"unbounded\";\n idsCache: CategoriesTreeIdsCache;\n hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n abortSignal?: AbortSignal;\n componentId?: GuidString;\n}\n\n/**\n * Defines hierarchy configuration supported by `CategoriesTree`.\n * @beta\n */\nexport interface CategoriesTreeHierarchyConfiguration {\n /** Should SubCategories be hidden. Defaults to `false` */\n hideSubCategories: boolean;\n /** Should Elements be shown. Defaults to `false` */\n showElements: boolean;\n /** Should categories without elements be shown. Defaults to `false`. */\n showEmptyCategories: boolean;\n}\n\n/** @internal */\nexport const defaultHierarchyConfiguration: CategoriesTreeHierarchyConfiguration = {\n hideSubCategories: false,\n showElements: false,\n showEmptyCategories: false,\n};\n\n/** @internal */\nexport class CategoriesTreeDefinition implements HierarchyDefinition {\n #impl: Promise<HierarchyDefinition> | undefined;\n #selectQueryFactory: NodesQueryClauseFactory;\n #nodeLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory;\n #idsCache: CategoriesTreeIdsCache;\n #hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n #iModelAccess: ECSchemaProvider & ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n #categoryClass: string;\n #categoryElementClass: string;\n #categoryModelClass: string;\n static #componentName = \"CategoriesTreeDefinition\";\n\n public constructor(props: CategoriesTreeDefinitionProps) {\n this.#iModelAccess = props.imodelAccess;\n this.#idsCache = props.idsCache;\n this.#nodeLabelSelectClauseFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: props.imodelAccess });\n this.#selectQueryFactory = createNodesQueryClauseFactory({\n imodelAccess: props.imodelAccess,\n instanceLabelSelectClauseFactory: this.#nodeLabelSelectClauseFactory,\n });\n this.#hierarchyConfig = props.hierarchyConfig;\n const { categoryClass, elementClass, modelClass } = getClassesByView(props.viewType);\n this.#categoryClass = categoryClass;\n this.#categoryElementClass = elementClass;\n this.#categoryModelClass = modelClass;\n }\n\n public preProcessNode: NodePreProcessor = async (node) => {\n if (node.extendedData?.isCategory) {\n return {\n ...node,\n extendedData: {\n ...node.extendedData,\n modelIds: parseIdsSelectorResult(node.extendedData.modelIds),\n },\n };\n }\n return node;\n };\n\n public async postProcessNode(node: ProcessedHierarchyNode): Promise<ProcessedHierarchyNode> {\n if (ProcessedHierarchyNode.isGroupingNode(node)) {\n const modelElementsMap = new Map<ModelId, { elementIds: Set<ElementId>; categoryOfTopMostParentElement: CategoryId }>();\n for (const child of node.children) {\n let modelEntry = modelElementsMap.get(child.extendedData?.modelId);\n if (!modelEntry) {\n modelEntry = {\n elementIds: new Set(),\n categoryOfTopMostParentElement: child.extendedData?.categoryOfTopMostParentElement,\n };\n modelElementsMap.set(child.extendedData?.modelId, modelEntry);\n }\n assert(child.key.type === \"instances\");\n for (const { id } of child.key.instanceKeys) {\n modelEntry.elementIds.add(id);\n }\n }\n\n const { hasSearchTargetAncestor, hasDirectNonSearchTargets, childrenCount, searchTargets } = groupingNodeDataFromChildren(node.children);\n const firstChild = node.children[0];\n assert(HierarchyNode.isInstancesNode(firstChild));\n return {\n ...node,\n label: node.label,\n extendedData: {\n ...node.extendedData,\n topMostParentElementId: firstChild.key.instanceKeys.every((instanceKey) => instanceKey.id !== firstChild.extendedData?.topMostParentElementId)\n ? firstChild.extendedData?.topMostParentElementId\n : undefined,\n // add `categoryId` from the first grouped element\n categoryId: firstChild.extendedData?.categoryId,\n modelElementsMap,\n childrenCount,\n ...(!!searchTargets?.size ? { searchTargets } : {}),\n ...(hasDirectNonSearchTargets ? { hasDirectNonSearchTargets } : {}),\n ...(hasSearchTargetAncestor ? { hasSearchTargetAncestor } : {}),\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 private async getHierarchyDefinition(): Promise<HierarchyDefinition> {\n this.#impl ??= (async () => {\n const isDefinitionContainerSupported = await firstValueFrom(this.#idsCache.getIsDefinitionContainerSupported());\n return createPredicateBasedHierarchyDefinition({\n classHierarchyInspector: this.#iModelAccess,\n hierarchy: {\n rootNodes: async (requestProps: DefineRootHierarchyLevelProps) => this.createDefinitionContainersAndCategoriesQuery(requestProps),\n childNodes: [\n ...(this.#hierarchyConfig.showElements\n ? [\n {\n parentInstancesNodePredicate: this.#categoryElementClass,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createElementChildrenQuery(requestProps),\n },\n {\n parentInstancesNodePredicate: CLASS_NAME_ISubModeledElement,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createISubModeledElementChildrenQuery(requestProps),\n },\n {\n parentInstancesNodePredicate: this.#categoryModelClass,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createGeometricModelChildrenQuery(requestProps),\n },\n ]\n : []),\n ...(this.#hierarchyConfig.hideSubCategories && !this.#hierarchyConfig.showElements\n ? []\n : [\n {\n parentInstancesNodePredicate: this.#categoryClass,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createCategoryChildrenQuery(requestProps),\n },\n ]),\n ...(isDefinitionContainerSupported\n ? [\n {\n parentInstancesNodePredicate: CLASS_NAME_DefinitionContainer,\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) =>\n this.createDefinitionContainersAndCategoriesQuery(requestProps),\n },\n ]\n : []),\n ],\n },\n });\n })();\n return this.#impl;\n }\n\n public async defineHierarchyLevel(props: DefineHierarchyLevelProps) {\n return (await this.getHierarchyDefinition()).defineHierarchyLevel(props);\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: this.#categoryModelClass,\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 hasChildren: true,\n extendedData: {\n isModel: true,\n },\n })}\n FROM ${this.#categoryModelClass} 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.#categoryElementClass})\n `,\n bindings: [...elementIds.map((id): ECSqlBinding => ({ type: \"id\", value: id }))],\n },\n },\n ];\n }\n\n private async createGeometricModelChildrenQuery({\n parentNodeInstanceIds: modelIds,\n instanceFilter,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const [instanceFilterClauses, categoryIds] = await Promise.all([\n this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: this.#categoryClass, alias: \"this\" },\n }),\n firstValueFrom(this.#idsCache.getCategoriesOfModelsTopMostElements(modelIds).pipe(map((categoriesSet) => [...categoriesSet]))),\n ]);\n if (categoryIds.length === 0) {\n return [];\n }\n\n return [\n {\n fullClassName: this.#categoryClass,\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.#categoryClass,\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 isCategoryOfSubModel: true,\n },\n supportsFiltering: true,\n })}\n FROM ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE InVirtualSet(?, this.ECInstanceId)\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n bindings: [{ type: \"idset\", value: categoryIds }],\n },\n },\n ];\n }\n\n private async createDefinitionContainersAndCategoriesQuery(props: {\n parentNodeInstanceIds?: Id64Array;\n instanceFilter?: GenericInstanceFilter;\n }): Promise<HierarchyLevelDefinition> {\n const { parentNodeInstanceIds, instanceFilter } = props;\n const { definitionContainers, categories } = await firstValueFrom(\n parentNodeInstanceIds === undefined\n ? this.#idsCache.getRootDefinitionContainersAndCategories({ includeEmpty: this.#hierarchyConfig.showEmptyCategories })\n : this.#idsCache.getDirectChildDefinitionContainersAndCategories({\n parentDefinitionContainerIds: parentNodeInstanceIds,\n includeEmpty: this.#hierarchyConfig.showEmptyCategories,\n }),\n );\n const hierarchyDefinition = new Array<HierarchyNodesDefinition>();\n if (categories.length > 0) {\n (await this.createCategoriesQuery({ categories, instanceFilter })).forEach((def) => hierarchyDefinition.push(def));\n }\n if (definitionContainers.length > 0) {\n (await this.createDefinitionContainersQuery({ definitionContainerIds: definitionContainers, instanceFilter })).forEach((def) =>\n hierarchyDefinition.push(def),\n );\n }\n return hierarchyDefinition;\n }\n\n private async createDefinitionContainersQuery({\n definitionContainerIds,\n instanceFilter,\n }: {\n definitionContainerIds: Id64Array;\n instanceFilter?: GenericInstanceFilter;\n }): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: CLASS_NAME_DefinitionContainer, alias: \"this\" },\n });\n\n return [\n {\n fullClassName: CLASS_NAME_DefinitionContainer,\n query: {\n ecsql: `\n SELECT\n ${await this.#selectQueryFactory.createSelectClause({\n ecClassId: { selector: ECSql.createRawPropertyValueSelector(\"this\", \"ECClassId\") },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: CLASS_NAME_DefinitionContainer,\n }),\n },\n extendedData: {\n isDefinitionContainer: true,\n imageId: \"icon-definition-container\",\n },\n hasChildren: true,\n supportsFiltering: true,\n })}\n FROM\n ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n this.ECInstanceId IN (${definitionContainerIds.join(\", \")})\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n private async createCategoriesQuery({\n categories,\n instanceFilter,\n }: {\n categories: Array<CategoryInfo>;\n instanceFilter?: GenericInstanceFilter;\n }): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: this.#categoryClass, alias: \"this\" },\n });\n const categoriesWithMultipleSubCategories = categories\n .filter((categoryInfo) => categoryInfo.subCategoryChildCount > 1)\n .map((categoryInfo) => categoryInfo.id);\n\n const hasChildrenSelector = () => {\n const conditions = new Array<string>();\n if (!this.#hierarchyConfig.hideSubCategories && categoriesWithMultipleSubCategories.length > 0) {\n conditions.push(`this.ECInstanceId IN (${categoriesWithMultipleSubCategories.join(\",\")})`);\n }\n if (this.#hierarchyConfig.showElements) {\n conditions.push(`\n this.ECInstanceId IN (\n SELECT e.Category.Id\n FROM ${this.#categoryElementClass} e\n WHERE\n e.Parent.Id IS NULL\n AND e.ECInstanceId NOT IN (SELECT m.ECInstanceId FROM ${this.#categoryModelClass} m)\n )`);\n }\n return conditions.length > 0\n ? {\n selector: `IIF(${conditions.join(\" OR \")}, 1, 0)`,\n }\n : false;\n };\n\n return [\n {\n fullClassName: this.#categoryClass,\n query: {\n ecsql: `\n SELECT\n ${await this.#selectQueryFactory.createSelectClause({\n ecClassId: { selector: ECSql.createRawPropertyValueSelector(\"this\", \"ECClassId\") },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this.#nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: this.#categoryClass,\n }),\n },\n hasChildren: hasChildrenSelector(),\n extendedData: {\n description: { selector: \"this.Description\" },\n isCategory: true,\n imageId: \"icon-layers\",\n hasSubCategories:\n categoriesWithMultipleSubCategories.length > 0\n ? { selector: `IIF(this.ECInstanceId IN (${categoriesWithMultipleSubCategories.join(\",\")}), true, false) ` }\n : false,\n },\n supportsFiltering: true,\n })}\n FROM\n ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n this.ECInstanceId IN (${categories.map((category) => category.id).join(\", \")})\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n private async createCategoryChildrenQuery(props: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n return (\n await Promise.all([\n ...(!this.#hierarchyConfig.hideSubCategories && props.parentNode.extendedData?.hasSubCategories ? [this.createSubCategoriesQuery(props)] : []),\n ...(this.#hierarchyConfig.showElements ? [this.createCategoryElementsQuery(props)] : []),\n ])\n ).reduce((acc, levelDefinition) => acc.concat(levelDefinition), new Array<HierarchyNodesDefinition>());\n }\n\n private async createSubCategoriesQuery({\n parentNodeInstanceIds: categoryIds,\n instanceFilter,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: CLASS_NAME_SubCategory, alias: \"this\" },\n });\n\n return [\n {\n fullClassName: CLASS_NAME_SubCategory,\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: CLASS_NAME_SubCategory,\n }),\n },\n extendedData: {\n categoryId: { selector: \"printf('0x%x', this.Parent.Id)\" },\n isSubCategory: true,\n imageId: \"icon-layers-isolate\",\n },\n supportsFiltering: false,\n })}\n FROM ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n NOT this.IsPrivate AND this.Parent.Id IN (${categoryIds.join(\",\")})\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n private createElementChildrenCountSelector(props: { elementIdSelector: string }): string {\n return `(\n WITH RECURSIVE\n ElementWithParent(id) AS (\n SELECT e.ECInstanceId\n FROM ${this.#categoryElementClass} e\n WHERE e.ECInstanceId = ${props.elementIdSelector}\n UNION ALL\n SELECT c.ECInstanceId\n FROM ${this.#categoryElementClass} c\n JOIN ElementWithParent p ON p.id = c.Parent.Id\n )\n SELECT COUNT(1) - 1\n FROM ElementWithParent\n )`;\n }\n\n private async createCategoryElementsQuery({\n parentNodeInstanceIds: categoryIds,\n instanceFilter,\n parentNode,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: this.#categoryElementClass, alias: \"this\" },\n });\n const modelIds: Id64Array = parentNode.extendedData?.isCategoryOfSubModel\n ? parseIdsSelectorResult(parentNode.extendedData?.modelIds)\n : await firstValueFrom(\n from(categoryIds).pipe(\n mergeMap((categoryId) => this.#idsCache.getModels({ categoryId })),\n mergeAll(),\n distinct(),\n toArray(),\n ),\n );\n\n if (modelIds.length === 0) {\n return [];\n }\n const modeledElements = await firstValueFrom(\n from(modelIds).pipe(\n mergeMap((modelId) =>\n from(categoryIds).pipe(\n mergeMap((categoryId) => this.#idsCache.getSubModels({ modelId, categoryId })),\n mergeAll(),\n ),\n ),\n toArray(),\n ),\n );\n const bindings = new Array<ECSqlBinding>();\n categoryIds.forEach((id) => bindings.push({ type: \"id\", value: id }));\n modelIds.forEach((id) => bindings.push({ type: \"id\", value: id }));\n return [\n {\n fullClassName: this.#categoryElementClass,\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.#categoryElementClass,\n }),\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.#categoryElementClass} ce\n WHERE ce.Parent.Id = this.ECInstanceId\n LIMIT 1\n ), 0)\n )\n `,\n },\n grouping: {\n byClass: true,\n },\n extendedData: {\n modelId: { selector: \"IdToHex(this.Model.Id)\" },\n categoryId: { selector: \"IdToHex(this.Category.Id)\" },\n imageId: \"icon-item\",\n isElement: true,\n childrenCount: { selector: this.createElementChildrenCountSelector({ elementIdSelector: \"this.ECInstanceId\" }) },\n categoryOfTopMostParentElement: { selector: \"IdToHex(this.Category.Id)\" },\n topMostParentElementId: { selector: \"IdToHex(this.ECInstanceId)\" },\n },\n supportsFiltering: true,\n })}\n FROM ${instanceFilterClauses.from} this\n ${parentNode.extendedData?.isCategoryOfSubModel ? \"\" : `JOIN ${CLASS_NAME_InformationPartitionElement} ipe ON ipe.ECInstanceId = this.Model.Id`}\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,\n },\n },\n ];\n }\n\n private async createElementChildrenQuery({\n parentNodeInstanceIds: elementIds,\n instanceFilter,\n parentNode,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this.#selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: this.#categoryElementClass, alias: \"this\" },\n });\n const bindings = new Array<ECSqlBinding>();\n elementIds.forEach((id) => bindings.push({ type: \"id\", value: id }));\n return [\n {\n fullClassName: this.#categoryElementClass,\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.#categoryElementClass,\n }),\n },\n hasChildren: {\n selector: `\n IFNULL((\n SELECT 1\n FROM ${this.#categoryElementClass} ce\n JOIN ${CLASS_NAME_Model} 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 grouping: {\n byClass: true,\n },\n extendedData: {\n modelId: { selector: \"IdToHex(this.Model.Id)\" },\n categoryId: { selector: \"IdToHex(this.Category.Id)\" },\n imageId: \"icon-item\",\n isElement: true,\n childrenCount: { selector: this.createElementChildrenCountSelector({ elementIdSelector: \"this.ECInstanceId\" }) },\n categoryOfTopMostParentElement: {\n selector: `IdToHex(${parentNode.extendedData?.categoryOfTopMostParentElement})`,\n },\n topMostParentElementId: { selector: `IdToHex(${parentNode.extendedData?.topMostParentElementId})` },\n },\n supportsFiltering: true,\n })}\n FROM ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n this.Parent.Id IN (${elementIds.join(\",\")})\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n public static async createInstanceKeyPaths(props: CategoriesTreeInstanceKeyPathsFromInstanceLabelProps): Promise<NormalizedHierarchySearchPath[]> {\n const labelsFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: props.imodelAccess });\n return createInstanceKeyPathsFromInstanceLabel({\n ...props,\n labelsFactory,\n componentId: props.componentId ?? Guid.createValue(),\n componentName: this.#componentName,\n });\n }\n}\n\nasync function createInstanceKeyPathsFromInstanceLabel(\n props: MarkRequired<CategoriesTreeInstanceKeyPathsFromInstanceLabelProps, \"componentId\"> & {\n labelsFactory: IInstanceLabelSelectClauseFactory;\n componentName: string;\n },\n): Promise<NormalizedHierarchySearchPath[]> {\n const { idsCache, abortSignal, label, viewType, labelsFactory, limit, hierarchyConfig, imodelAccess, componentId, componentName } = props;\n const { categoryClass, elementClass } = getClassesByView(viewType);\n\n const adjustedLabel = label.replace(/[%_\\\\]/g, \"\\\\$&\");\n\n const CATEGORIES_WITH_LABELS_CTE = \"CategoriesWithLabels\";\n const ELEMENTS_WITH_LABELS_CTE = \"ElementsWithLabels\";\n const SUBCATEGORIES_WITH_LABELS_CTE = \"SubCategoriesWithLabels\";\n const DEFINITION_CONTAINERS_WITH_LABELS_CTE = \"DefinitionContainersWithLabels\";\n\n return lastValueFrom(\n idsCache\n .getAllDefinitionContainersAndCategories({\n includeEmpty: props.hierarchyConfig.showEmptyCategories,\n })\n .pipe(\n mergeMap(async ({ definitionContainers, categories }) => {\n if (categories.length === 0) {\n return undefined;\n }\n const [categoryLabelSelectClause, subCategoryLabelSelectClause, elementLabelSelectClause, definitionContainerLabelSelectClause] = await Promise.all(\n [categoryClass, CLASS_NAME_SubCategory, elementClass, ...(definitionContainers.length > 0 ? [CLASS_NAME_DefinitionContainer] : [])].map(\n async (className) => labelsFactory.createSelectClause({ classAlias: \"this\", className }),\n ),\n );\n const ctes = [\n `${CATEGORIES_WITH_LABELS_CTE}(ClassName, ECInstanceId, ChildCount, DisplayLabel) AS (\n SELECT\n 'c',\n this.ECInstanceId,\n COUNT(sc.ECInstanceId),\n ${categoryLabelSelectClause}\n FROM\n ${categoryClass} this\n JOIN ${CLASS_NAME_SubCategory} sc ON sc.Parent.Id = this.ECInstanceId\n WHERE\n this.ECInstanceId IN (${categories.join(\", \")})\n GROUP BY this.ECInstanceId\n )`,\n ...(hierarchyConfig.showElements\n ? [\n `${ELEMENTS_WITH_LABELS_CTE}(ClassName, ECInstanceId, ParentId, DisplayLabel) AS (\n SELECT\n 'e',\n this.ECInstanceId,\n this.Parent.Id,\n ${elementLabelSelectClause}\n FROM\n ${elementClass} this\n JOIN ${CLASS_NAME_Model} m ON this.Model.Id = m.ECInstanceId\n WHERE\n NOT m.IsPrivate\n AND this.Category.Id IN (${categories.join(\", \")})\n )`,\n ]\n : []),\n ...(hierarchyConfig.hideSubCategories\n ? []\n : [\n `${SUBCATEGORIES_WITH_LABELS_CTE}(ClassName, ECInstanceId, ParentId, DisplayLabel) AS (\n SELECT\n 'sc',\n this.ECInstanceId,\n this.Parent.Id,\n ${subCategoryLabelSelectClause}\n FROM\n ${CLASS_NAME_SubCategory} this\n WHERE\n NOT this.IsPrivate\n AND this.Parent.Id IN (${categories.join(\", \")})\n )`,\n ]),\n ...(definitionContainers.length > 0\n ? [\n `${DEFINITION_CONTAINERS_WITH_LABELS_CTE}(ClassName, ECInstanceId, DisplayLabel) AS (\n SELECT\n 'dc',\n this.ECInstanceId,\n ${definitionContainerLabelSelectClause}\n FROM\n ${CLASS_NAME_DefinitionContainer} this\n WHERE\n this.ECInstanceId IN (${definitionContainers.join(\", \")})\n )`,\n ]\n : []),\n ];\n const ecsql = `\n SELECT * FROM (\n SELECT\n c.ClassName AS ClassName,\n c.ECInstanceId AS ECInstanceId\n FROM\n ${CATEGORIES_WITH_LABELS_CTE} c\n WHERE\n c.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\\\'\n ${\n hierarchyConfig.showElements\n ? `\n UNION ALL\n SELECT\n e.ClassName AS ClassName,\n e.ECInstanceId AS ECInstanceId\n FROM\n ${ELEMENTS_WITH_LABELS_CTE} e\n WHERE\n e.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\\\'\n `\n : \"\"\n }\n ${\n hierarchyConfig.hideSubCategories\n ? \"\"\n : `\n UNION ALL\n SELECT\n sc.ClassName AS ClassName,\n sc.ECInstanceId AS ECInstanceId\n FROM\n ${CATEGORIES_WITH_LABELS_CTE} c\n JOIN ${SUBCATEGORIES_WITH_LABELS_CTE} sc ON sc.ParentId = c.ECInstanceId\n WHERE\n c.ChildCount > 1\n AND sc.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\\\'\n `\n }\n ${\n definitionContainers.length > 0\n ? `\n UNION ALL\n SELECT\n dc.ClassName AS ClassName,\n dc.ECInstanceId AS ECInstanceId\n FROM\n ${DEFINITION_CONTAINERS_WITH_LABELS_CTE} dc\n WHERE\n dc.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\\\'\n `\n : \"\"\n }\n )\n ${limit === undefined ? `LIMIT ${MAX_SEARCH_INSTANCE_KEY_COUNT + 1}` : limit !== \"unbounded\" ? `LIMIT ${limit}` : \"\"}\n `;\n const bindings = [\n { type: \"string\" as const, value: adjustedLabel },\n ...(hierarchyConfig.showElements ? [{ type: \"string\" as const, value: adjustedLabel }] : []),\n ...(hierarchyConfig.hideSubCategories ? [] : [{ type: \"string\" as const, value: adjustedLabel }]),\n ...(definitionContainers.length > 0 ? [{ type: \"string\" as const, value: adjustedLabel }] : []),\n ];\n return { ctes, ecsql, bindings };\n }),\n mergeMap((queryProps) => {\n if (!queryProps) {\n return EMPTY;\n }\n return from(imodelAccess.createQueryReader(queryProps, { restartToken: `${componentName}/${componentId}/filter-by-label`, limit })).pipe(\n catchBeSQLiteInterrupts,\n );\n }),\n releaseMainThreadOnItemsCount(1000),\n map((row): InstanceKey => {\n let className: string;\n switch (row.ClassName) {\n case \"c\":\n className = categoryClass;\n break;\n case \"sc\":\n className = CLASS_NAME_SubCategory;\n break;\n case \"e\":\n className = elementClass;\n break;\n default:\n className = CLASS_NAME_DefinitionContainer;\n break;\n }\n return {\n className,\n id: row.ECInstanceId,\n };\n }),\n toArray(),\n mergeMap((targetItems) => createInstanceKeyPathsFromTargetItems({ ...props, targetItems })),\n toArray(),\n abortSignal ? takeUntil(fromEvent(abortSignal, \"abort\")) : identity,\n defaultIfEmpty([]),\n ),\n );\n}\n\nfunction createInstanceKeyPathsFromTargetItems({\n targetItems,\n imodelAccess,\n viewType,\n hierarchyConfig,\n idsCache,\n limit,\n componentId,\n componentName,\n}: Omit<MarkRequired<CategoriesTreeInstanceKeyPathsFromInstanceLabelProps, \"componentId\">, \"label\"> & {\n targetItems: InstanceKey[];\n componentName: string;\n}): Observable<NormalizedHierarchySearchPath> {\n if (limit !== \"unbounded\" && targetItems.length > (limit ?? MAX_SEARCH_INSTANCE_KEY_COUNT)) {\n throw new SearchLimitExceededError(limit ?? MAX_SEARCH_INSTANCE_KEY_COUNT);\n }\n const { categoryClass } = getClassesByView(viewType);\n return fromWithRelease({ source: targetItems, releaseOnCount: 500 }).pipe(\n reduce(\n (acc, { id, className }) => {\n if (className === categoryClass) {\n acc.categoryIds.push(id);\n return acc;\n }\n if (className === CLASS_NAME_DefinitionContainer) {\n acc.definitionContainerIds.push(id);\n return acc;\n }\n if (className === CLASS_NAME_SubCategory) {\n if (hierarchyConfig.hideSubCategories) {\n return acc;\n }\n acc.subCategoryIds.push(id);\n return acc;\n }\n\n if (!hierarchyConfig.showElements) {\n return acc;\n }\n acc.elementIds.push(id);\n return acc;\n },\n {\n definitionContainerIds: new Array<DefinitionContainerId>(),\n categoryIds: new Array<CategoryId>(),\n subCategoryIds: new Array<SubCategoryId>(),\n elementIds: new Array<ElementId>(),\n },\n ),\n mergeMap((ids) => {\n const elementsLength = ids.elementIds.length;\n return merge(\n fromWithRelease({ source: ids.definitionContainerIds, releaseOnCount: 200 }).pipe(\n mergeMap((id) => idsCache.getInstanceKeyPaths({ definitionContainerId: id })),\n map((path) => ({ path, options: { reveal: true } })),\n ),\n fromWithRelease({ source: ids.categoryIds, releaseOnCount: 200 }).pipe(\n mergeMap((id) => idsCache.getInstanceKeyPaths({ categoryId: id })),\n map((path) => ({ path, options: { reveal: true } })),\n ),\n fromWithRelease({ source: ids.subCategoryIds, releaseOnCount: 200 }).pipe(\n mergeMap((id) => idsCache.getInstanceKeyPaths({ subCategoryId: id })),\n map((path) => ({ path, options: { reveal: true } })),\n ),\n from(ids.elementIds).pipe(\n bufferCount(getOptimalBatchSize({ totalSize: elementsLength, maximumBatchSize: 5000 })),\n releaseMainThreadOnItemsCount(1),\n mergeMap(\n (block, chunkIndex) =>\n createGeometricElementInstanceKeyPaths({\n imodelAccess,\n idsCache,\n hierarchyConfig,\n viewType,\n targetItems: block,\n chunkIndex,\n componentId,\n componentName,\n }),\n 10,\n ),\n ),\n );\n }),\n );\n}\n\nfunction createGeometricElementInstanceKeyPaths(props: {\n imodelAccess: ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n idsCache: CategoriesTreeIdsCache;\n hierarchyConfig: CategoriesTreeHierarchyConfiguration;\n viewType: \"2d\" | \"3d\";\n targetItems: Id64Array;\n componentId: GuidString;\n componentName: string;\n chunkIndex: number;\n}): Observable<NormalizedHierarchySearchPath> {\n const separator = \";\";\n const { targetItems, chunkIndex, componentId, componentName, hierarchyConfig, idsCache, imodelAccess, viewType } = props;\n const { categoryClass, elementClass, modelClass } = getClassesByView(viewType);\n if (targetItems.length === 0 || !hierarchyConfig.showElements) {\n return EMPTY;\n }\n\n return defer(() => {\n const ctes = [\n `CategoriesElementsHierarchy(ECInstanceId, ParentId, ModelId, Path) AS (\n SELECT\n e.ECInstanceId,\n e.Parent.Id,\n e.Model.Id,\n IIF(e.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([e].[ECInstanceId]) AS TEXT),\n 'e${separator}' || CAST(IdToHex([e].[ECInstanceId]) AS TEXT)\n )\n FROM ${elementClass} e\n LEFT JOIN ${modelClass} m ON (e.Parent.Id IS NULL AND m.ECInstanceId = e.Model.Id)\n LEFT JOIN ${categoryClass} c ON (e.Parent.Id IS NULL AND c.ECInstanceId = e.Category.Id)\n WHERE e.ECInstanceId IN (${targetItems.join(\",\")})\n\n UNION ALL\n\n SELECT\n pe.ECInstanceId,\n pe.Parent.Id,\n pe.Model.Id,\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 CategoriesElementsHierarchy ce\n JOIN ${elementClass} pe ON (pe.ECInstanceId = ce.ParentId OR pe.ECInstanceId = ce.ModelId AND ce.ParentId IS NULL)\n LEFT JOIN ${modelClass} m ON (pe.Parent.Id IS NULL AND m.ECInstanceId = pe.Model.Id)\n LEFT JOIN ${categoryClass} c ON (pe.Parent.Id IS NULL AND c.ECInstanceId = pe.Category.Id)\n )`,\n ];\n const ecsql = `\n SELECT mce.Path\n FROM CategoriesElementsHierarchy mce\n WHERE mce.ParentId IS NULL\n `;\n\n return imodelAccess.createQueryReader(\n { ctes, ecsql },\n { rowFormat: \"Indexes\", limit: \"unbounded\", restartToken: `${componentName}/${componentId}/element-paths/${chunkIndex}` },\n );\n }).pipe(\n catchBeSQLiteInterrupts,\n releaseMainThreadOnItemsCount(300),\n map((row) => parseQueryRow(row, separator, elementClass, categoryClass, modelClass)),\n mergeMap((elementHierarchyPath) =>\n forkJoin({ elementHierarchyPath: of(elementHierarchyPath), pathToCategory: idsCache.getInstanceKeyPaths({ categoryId: elementHierarchyPath[0].id }) }),\n ),\n map(({ elementHierarchyPath, pathToCategory }) => {\n pathToCategory.pop(); // category is already included in the element hierarchy path\n const path = [...pathToCategory, ...elementHierarchyPath];\n return { path, options: { reveal: true } };\n }),\n );\n}\n\nfunction parseQueryRow(row: ECSqlQueryRow, separator: string, elementClassName: string, categoryClassName: string, modelClassName: string) {\n const rowElements: string[] = row[0].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: categoryClassName, id: rowElements[i + 1] });\n break;\n case \"m\":\n // Ignore first model since it isn't in hierarchy\n if (i === 0) {\n break;\n }\n path.push({ className: modelClassName, id: rowElements[i + 1] });\n break;\n }\n }\n\n return path;\n}\n"]}
|
package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeNode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CategoriesTreeNode.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/categories-tree/CategoriesTreeNode.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAKhE;;;GAGG;AACH,MAAM,KAAW,kBAAkB,CAiFlC;AAjFD,WAAiB,kBAAkB;IACjC,mFAAmF;IACtE,4CAAyB,GAAG,CAAC,IAAyC,EAAgE,EAAE,CACnJ,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,uBAAuB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC;IAEnH;;;;;;;;OAQG;IACU,iCAAc,GAAG,CAC5B,IAAyC,EAezC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;IAEhG,6DAA6D;IAChD,8BAAW,GAAG,CAAC,IAAyC,EAAgE,EAAE,CACrI,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IAEvF;;;;;;OAMG;IACU,gCAAa,GAAG,CAC3B,IAAyC,EAMzC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,WAAW,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;IAE9F;;;;;;OAMG;IACU,6CAA0B,GAAG,CACxC,IAAgC,EAMhC,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAE7C;;;;;OAKG;IACU,oCAAiB,GAAG,CAC/B,IAAyC,EAKzC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,eAAe,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;AACxG,CAAC,EAjFgB,kBAAkB,KAAlB,kBAAkB,QAiFlC","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 { HierarchyNode } from \"@itwin/presentation-hierarchies\";\n\nimport type { Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport type { ClassGroupingNodeKey, GroupingHierarchyNode, InstancesNodeKey, NonGroupingHierarchyNode } from \"@itwin/presentation-hierarchies\";\n\n/**\n * Contains utility functions for working with Categories Tree nodes.\n * @beta\n */\nexport namespace CategoriesTreeNode {\n /** Checks if the given node represents a `BisCore.DefinitionContainer` element. */\n export const isDefinitionContainerNode = (node: Pick<HierarchyNode, \"extendedData\">): node is NonGroupingHierarchyNode & { key: InstancesNodeKey } =>\n !!node.extendedData && \"isDefinitionContainer\" in node.extendedData && !!node.extendedData.isDefinitionContainer;\n\n /**\n * Checks if the given node represents a `BisCore.Category` element.\n *\n * If it does, the node's `extendedData` will contain the following properties:\n * - `description`: Optional description of the category\n * - `hasSubCategories`: Indicates whether the category has sub-categories\n * - `isCategoryOfSubModel`: Indicates that this node is located under a SubModel\n * - `modelIds`: (only if `isCategoryOfSubModel` is true) Ids of models that this category node is contained under\n */\n export const isCategoryNode = (\n node: Pick<HierarchyNode, \"extendedData\">,\n ): node is Omit<NonGroupingHierarchyNode, \"extendedData\"> & { key: InstancesNodeKey } & {\n extendedData: {\n description?: string;\n hasSubCategories?: boolean;\n } & (\n | {\n isCategoryOfSubModel?: false;\n }\n | {\n /** Ids of models that this category node is contained under. */\n modelIds: Id64Array;\n isCategoryOfSubModel: true;\n }\n );\n } => !!node.extendedData && \"isCategory\" in node.extendedData && !!node.extendedData.isCategory;\n\n /** Checks if the given node represents a `BisCore.Model`. */\n export const isModelNode = (node: Pick<HierarchyNode, \"extendedData\">): node is NonGroupingHierarchyNode & { key: InstancesNodeKey } =>\n !!node.extendedData && \"isModel\" in node.extendedData && !!node.extendedData.isModel;\n\n /**\n * Checks if the given node represents a `BisCore.GeometricElement` element.\n *\n * If it does, the node's `extendedData` will contain the following properties:\n * - `modelId`: `Id64String` of the model containing the element\n * - `categoryId`: `Id64String` of the category of the element\n */\n export const isElementNode = (\n node: Pick<HierarchyNode, \"extendedData\">,\n ): node is Omit<NonGroupingHierarchyNode, \"extendedData\"> & { key: InstancesNodeKey } & {\n extendedData: {\n modelId: Id64String;\n categoryId: Id64String;\n };\n } => !!node.extendedData && \"isElement\" in node.extendedData && !!node.extendedData.isElement;\n\n /**\n * Checks if the given node is a class grouping node of `BisCore.GeometricElement` nodes.\n *\n * If it does, the node's `extendedData` will contain the following properties:\n * - `categoryId`: `Id64String` of the category of the element\n * - `modelElementsMap`: A map of model's `Id64String` -> Set of elements' `Id64String`s contained within this grouping node\n */\n export const isElementClassGroupingNode = (\n node: Pick<HierarchyNode, \"key\">,\n ): node is Omit<GroupingHierarchyNode, \"extendedData\"> & { key: ClassGroupingNodeKey } & {\n extendedData: {\n categoryId: Id64String;\n modelElementsMap: Map<Id64String, Set<Id64String
|
|
1
|
+
{"version":3,"file":"CategoriesTreeNode.js","sourceRoot":"","sources":["../../../../../../src/tree-widget-react/components/trees/categories-tree/CategoriesTreeNode.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAKhE;;;GAGG;AACH,MAAM,KAAW,kBAAkB,CAiFlC;AAjFD,WAAiB,kBAAkB;IACjC,mFAAmF;IACtE,4CAAyB,GAAG,CAAC,IAAyC,EAAgE,EAAE,CACnJ,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,uBAAuB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC;IAEnH;;;;;;;;OAQG;IACU,iCAAc,GAAG,CAC5B,IAAyC,EAezC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;IAEhG,6DAA6D;IAChD,8BAAW,GAAG,CAAC,IAAyC,EAAgE,EAAE,CACrI,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IAEvF;;;;;;OAMG;IACU,gCAAa,GAAG,CAC3B,IAAyC,EAMzC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,WAAW,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;IAE9F;;;;;;OAMG;IACU,6CAA0B,GAAG,CACxC,IAAgC,EAMhC,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAE7C;;;;;OAKG;IACU,oCAAiB,GAAG,CAC/B,IAAyC,EAKzC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,eAAe,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;AACxG,CAAC,EAjFgB,kBAAkB,KAAlB,kBAAkB,QAiFlC","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 { HierarchyNode } from \"@itwin/presentation-hierarchies\";\n\nimport type { Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport type { ClassGroupingNodeKey, GroupingHierarchyNode, InstancesNodeKey, NonGroupingHierarchyNode } from \"@itwin/presentation-hierarchies\";\n\n/**\n * Contains utility functions for working with Categories Tree nodes.\n * @beta\n */\nexport namespace CategoriesTreeNode {\n /** Checks if the given node represents a `BisCore.DefinitionContainer` element. */\n export const isDefinitionContainerNode = (node: Pick<HierarchyNode, \"extendedData\">): node is NonGroupingHierarchyNode & { key: InstancesNodeKey } =>\n !!node.extendedData && \"isDefinitionContainer\" in node.extendedData && !!node.extendedData.isDefinitionContainer;\n\n /**\n * Checks if the given node represents a `BisCore.Category` element.\n *\n * If it does, the node's `extendedData` will contain the following properties:\n * - `description`: Optional description of the category\n * - `hasSubCategories`: Indicates whether the category has sub-categories\n * - `isCategoryOfSubModel`: Indicates that this node is located under a SubModel\n * - `modelIds`: (only if `isCategoryOfSubModel` is true) Ids of models that this category node is contained under\n */\n export const isCategoryNode = (\n node: Pick<HierarchyNode, \"extendedData\">,\n ): node is Omit<NonGroupingHierarchyNode, \"extendedData\"> & { key: InstancesNodeKey } & {\n extendedData: {\n description?: string;\n hasSubCategories?: boolean;\n } & (\n | {\n isCategoryOfSubModel?: false;\n }\n | {\n /** Ids of models that this category node is contained under. */\n modelIds: Id64Array;\n isCategoryOfSubModel: true;\n }\n );\n } => !!node.extendedData && \"isCategory\" in node.extendedData && !!node.extendedData.isCategory;\n\n /** Checks if the given node represents a `BisCore.Model`. */\n export const isModelNode = (node: Pick<HierarchyNode, \"extendedData\">): node is NonGroupingHierarchyNode & { key: InstancesNodeKey } =>\n !!node.extendedData && \"isModel\" in node.extendedData && !!node.extendedData.isModel;\n\n /**\n * Checks if the given node represents a `BisCore.GeometricElement` element.\n *\n * If it does, the node's `extendedData` will contain the following properties:\n * - `modelId`: `Id64String` of the model containing the element\n * - `categoryId`: `Id64String` of the category of the element\n */\n export const isElementNode = (\n node: Pick<HierarchyNode, \"extendedData\">,\n ): node is Omit<NonGroupingHierarchyNode, \"extendedData\"> & { key: InstancesNodeKey } & {\n extendedData: {\n modelId: Id64String;\n categoryId: Id64String;\n };\n } => !!node.extendedData && \"isElement\" in node.extendedData && !!node.extendedData.isElement;\n\n /**\n * Checks if the given node is a class grouping node of `BisCore.GeometricElement` nodes.\n *\n * If it does, the node's `extendedData` will contain the following properties:\n * - `categoryId`: `Id64String` of the category of the element\n * - `modelElementsMap`: A map of model's `Id64String` -> Set of elements' `Id64String`s contained within this grouping node\n */\n export const isElementClassGroupingNode = (\n node: Pick<HierarchyNode, \"key\">,\n ): node is Omit<GroupingHierarchyNode, \"extendedData\"> & { key: ClassGroupingNodeKey } & {\n extendedData: {\n categoryId: Id64String;\n modelElementsMap: Map<Id64String, { elementIds: Set<Id64String> }>;\n };\n } => HierarchyNode.isClassGroupingNode(node);\n\n /**\n * Checks if the given node represents a `BisCore.SubCategory` element.\n *\n * If it does, the node's `extendedData` will contain the following properties:\n * - `categoryId`: `Id64String` of the parent category\n */\n export const isSubCategoryNode = (\n node: Pick<HierarchyNode, \"extendedData\">,\n ): node is Omit<NonGroupingHierarchyNode, \"extendedData\"> & { key: InstancesNodeKey } & {\n extendedData: {\n categoryId: Id64String;\n };\n } => !!node.extendedData && \"isSubCategory\" in node.extendedData && !!node.extendedData.isSubCategory;\n}\n"]}
|