@itwin/presentation-hierarchies 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/LICENSE.md +9 -0
- package/README.md +178 -0
- package/lib/cjs/hierarchies/HierarchyDefinition.d.ts +228 -0
- package/lib/cjs/hierarchies/HierarchyDefinition.d.ts.map +1 -0
- package/lib/cjs/hierarchies/HierarchyDefinition.js +94 -0
- package/lib/cjs/hierarchies/HierarchyDefinition.js.map +1 -0
- package/lib/cjs/hierarchies/HierarchyErrors.d.ts +9 -0
- package/lib/cjs/hierarchies/HierarchyErrors.d.ts.map +1 -0
- package/lib/cjs/hierarchies/HierarchyErrors.js +20 -0
- package/lib/cjs/hierarchies/HierarchyErrors.js.map +1 -0
- package/lib/cjs/hierarchies/HierarchyNode.d.ts +337 -0
- package/lib/cjs/hierarchies/HierarchyNode.d.ts.map +1 -0
- package/lib/cjs/hierarchies/HierarchyNode.js +64 -0
- package/lib/cjs/hierarchies/HierarchyNode.js.map +1 -0
- package/lib/cjs/hierarchies/HierarchyNodeIdentifier.d.ts +33 -0
- package/lib/cjs/hierarchies/HierarchyNodeIdentifier.d.ts.map +1 -0
- package/lib/cjs/hierarchies/HierarchyNodeIdentifier.js +34 -0
- package/lib/cjs/hierarchies/HierarchyNodeIdentifier.js.map +1 -0
- package/lib/cjs/hierarchies/HierarchyNodeKey.d.ts +137 -0
- package/lib/cjs/hierarchies/HierarchyNodeKey.d.ts.map +1 -0
- package/lib/cjs/hierarchies/HierarchyNodeKey.js +163 -0
- package/lib/cjs/hierarchies/HierarchyNodeKey.js.map +1 -0
- package/lib/cjs/hierarchies/HierarchyProvider.d.ts +104 -0
- package/lib/cjs/hierarchies/HierarchyProvider.d.ts.map +1 -0
- package/lib/cjs/hierarchies/HierarchyProvider.js +384 -0
- package/lib/cjs/hierarchies/HierarchyProvider.js.map +1 -0
- package/lib/cjs/hierarchies/LimitingECSqlQueryExecutor.d.ts +21 -0
- package/lib/cjs/hierarchies/LimitingECSqlQueryExecutor.d.ts.map +1 -0
- package/lib/cjs/hierarchies/LimitingECSqlQueryExecutor.js +100 -0
- package/lib/cjs/hierarchies/LimitingECSqlQueryExecutor.js.map +1 -0
- package/lib/cjs/hierarchies/Logging.d.ts +13 -0
- package/lib/cjs/hierarchies/Logging.d.ts.map +1 -0
- package/lib/cjs/hierarchies/Logging.js +28 -0
- package/lib/cjs/hierarchies/Logging.js.map +1 -0
- package/lib/cjs/hierarchies/NodeSelectQueryFactory.d.ts +205 -0
- package/lib/cjs/hierarchies/NodeSelectQueryFactory.d.ts.map +1 -0
- package/lib/cjs/hierarchies/NodeSelectQueryFactory.js +467 -0
- package/lib/cjs/hierarchies/NodeSelectQueryFactory.js.map +1 -0
- package/lib/cjs/hierarchies/internal/ChildNodeObservablesCache.d.ts +40 -0
- package/lib/cjs/hierarchies/internal/ChildNodeObservablesCache.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/ChildNodeObservablesCache.js +84 -0
- package/lib/cjs/hierarchies/internal/ChildNodeObservablesCache.js.map +1 -0
- package/lib/cjs/hierarchies/internal/Common.d.ts +20 -0
- package/lib/cjs/hierarchies/internal/Common.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/Common.js +106 -0
- package/lib/cjs/hierarchies/internal/Common.js.map +1 -0
- package/lib/cjs/hierarchies/internal/EachValueFrom.d.ts +12 -0
- package/lib/cjs/hierarchies/internal/EachValueFrom.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/EachValueFrom.js +108 -0
- package/lib/cjs/hierarchies/internal/EachValueFrom.js.map +1 -0
- package/lib/cjs/hierarchies/internal/FilteringHierarchyDefinition.d.ts +39 -0
- package/lib/cjs/hierarchies/internal/FilteringHierarchyDefinition.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/FilteringHierarchyDefinition.js +181 -0
- package/lib/cjs/hierarchies/internal/FilteringHierarchyDefinition.js.map +1 -0
- package/lib/cjs/hierarchies/internal/LoggingUtils.d.ts +14 -0
- package/lib/cjs/hierarchies/internal/LoggingUtils.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/LoggingUtils.js +56 -0
- package/lib/cjs/hierarchies/internal/LoggingUtils.js.map +1 -0
- package/lib/cjs/hierarchies/internal/SubscriptionScheduler.d.ts +17 -0
- package/lib/cjs/hierarchies/internal/SubscriptionScheduler.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/SubscriptionScheduler.js +57 -0
- package/lib/cjs/hierarchies/internal/SubscriptionScheduler.js.map +1 -0
- package/lib/cjs/hierarchies/internal/TreeNodesReader.d.ts +37 -0
- package/lib/cjs/hierarchies/internal/TreeNodesReader.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/TreeNodesReader.js +46 -0
- package/lib/cjs/hierarchies/internal/TreeNodesReader.js.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/DetermineChildren.d.ts +11 -0
- package/lib/cjs/hierarchies/internal/operators/DetermineChildren.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/DetermineChildren.js +34 -0
- package/lib/cjs/hierarchies/internal/operators/DetermineChildren.js.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/Grouping.d.ts +27 -0
- package/lib/cjs/hierarchies/internal/operators/Grouping.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/Grouping.js +161 -0
- package/lib/cjs/hierarchies/internal/operators/Grouping.js.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/HideIfNoChildren.d.ts +11 -0
- package/lib/cjs/hierarchies/internal/operators/HideIfNoChildren.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/HideIfNoChildren.js +52 -0
- package/lib/cjs/hierarchies/internal/operators/HideIfNoChildren.js.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/HideNodesInHierarchy.d.ts +11 -0
- package/lib/cjs/hierarchies/internal/operators/HideNodesInHierarchy.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/HideNodesInHierarchy.js +55 -0
- package/lib/cjs/hierarchies/internal/operators/HideNodesInHierarchy.js.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/Partition.d.ts +6 -0
- package/lib/cjs/hierarchies/internal/operators/Partition.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/Partition.js +61 -0
- package/lib/cjs/hierarchies/internal/operators/Partition.js.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/ReduceToMergeMap.d.ts +22 -0
- package/lib/cjs/hierarchies/internal/operators/ReduceToMergeMap.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/ReduceToMergeMap.js +51 -0
- package/lib/cjs/hierarchies/internal/operators/ReduceToMergeMap.js.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/ReleaseMainThread.d.ts +7 -0
- package/lib/cjs/hierarchies/internal/operators/ReleaseMainThread.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/ReleaseMainThread.js +25 -0
- package/lib/cjs/hierarchies/internal/operators/ReleaseMainThread.js.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/ShareReplayWithErrors.d.ts +9 -0
- package/lib/cjs/hierarchies/internal/operators/ShareReplayWithErrors.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/ShareReplayWithErrors.js +24 -0
- package/lib/cjs/hierarchies/internal/operators/ShareReplayWithErrors.js.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/Sorting.d.ts +12 -0
- package/lib/cjs/hierarchies/internal/operators/Sorting.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/Sorting.js +26 -0
- package/lib/cjs/hierarchies/internal/operators/Sorting.js.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/TapOnce.d.ts +4 -0
- package/lib/cjs/hierarchies/internal/operators/TapOnce.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/TapOnce.js +20 -0
- package/lib/cjs/hierarchies/internal/operators/TapOnce.js.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/AutoExpand.d.ts +4 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/AutoExpand.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/AutoExpand.js +27 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/AutoExpand.js.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/BaseClassGrouping.d.ts +10 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/BaseClassGrouping.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/BaseClassGrouping.js +115 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/BaseClassGrouping.js.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/ClassGrouping.d.ts +6 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/ClassGrouping.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/ClassGrouping.js +56 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/ClassGrouping.js.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/GroupHiding.d.ts +4 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/GroupHiding.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/GroupHiding.js +54 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/GroupHiding.js.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/LabelGrouping.d.ts +5 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/LabelGrouping.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/LabelGrouping.js +61 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/LabelGrouping.js.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/PropertiesGrouping.d.ts +31 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/PropertiesGrouping.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/PropertiesGrouping.js +310 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/PropertiesGrouping.js.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/Shared.d.ts +5 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/Shared.d.ts.map +1 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/Shared.js +30 -0
- package/lib/cjs/hierarchies/internal/operators/grouping/Shared.js.map +1 -0
- package/lib/cjs/presentation-hierarchies.d.ts +11 -0
- package/lib/cjs/presentation-hierarchies.d.ts.map +1 -0
- package/lib/cjs/presentation-hierarchies.js +31 -0
- package/lib/cjs/presentation-hierarchies.js.map +1 -0
- package/lib/esm/hierarchies/HierarchyDefinition.d.ts +228 -0
- package/lib/esm/hierarchies/HierarchyDefinition.d.ts.map +1 -0
- package/lib/esm/hierarchies/HierarchyDefinition.js +90 -0
- package/lib/esm/hierarchies/HierarchyDefinition.js.map +1 -0
- package/lib/esm/hierarchies/HierarchyErrors.d.ts +9 -0
- package/lib/esm/hierarchies/HierarchyErrors.d.ts.map +1 -0
- package/lib/esm/hierarchies/HierarchyErrors.js +16 -0
- package/lib/esm/hierarchies/HierarchyErrors.js.map +1 -0
- package/lib/esm/hierarchies/HierarchyNode.d.ts +337 -0
- package/lib/esm/hierarchies/HierarchyNode.d.ts.map +1 -0
- package/lib/esm/hierarchies/HierarchyNode.js +61 -0
- package/lib/esm/hierarchies/HierarchyNode.js.map +1 -0
- package/lib/esm/hierarchies/HierarchyNodeIdentifier.d.ts +33 -0
- package/lib/esm/hierarchies/HierarchyNodeIdentifier.d.ts.map +1 -0
- package/lib/esm/hierarchies/HierarchyNodeIdentifier.js +31 -0
- package/lib/esm/hierarchies/HierarchyNodeIdentifier.js.map +1 -0
- package/lib/esm/hierarchies/HierarchyNodeKey.d.ts +137 -0
- package/lib/esm/hierarchies/HierarchyNodeKey.d.ts.map +1 -0
- package/lib/esm/hierarchies/HierarchyNodeKey.js +160 -0
- package/lib/esm/hierarchies/HierarchyNodeKey.js.map +1 -0
- package/lib/esm/hierarchies/HierarchyProvider.d.ts +104 -0
- package/lib/esm/hierarchies/HierarchyProvider.d.ts.map +1 -0
- package/lib/esm/hierarchies/HierarchyProvider.js +380 -0
- package/lib/esm/hierarchies/HierarchyProvider.js.map +1 -0
- package/lib/esm/hierarchies/LimitingECSqlQueryExecutor.d.ts +21 -0
- package/lib/esm/hierarchies/LimitingECSqlQueryExecutor.d.ts.map +1 -0
- package/lib/esm/hierarchies/LimitingECSqlQueryExecutor.js +96 -0
- package/lib/esm/hierarchies/LimitingECSqlQueryExecutor.js.map +1 -0
- package/lib/esm/hierarchies/Logging.d.ts +13 -0
- package/lib/esm/hierarchies/Logging.d.ts.map +1 -0
- package/lib/esm/hierarchies/Logging.js +23 -0
- package/lib/esm/hierarchies/Logging.js.map +1 -0
- package/lib/esm/hierarchies/NodeSelectQueryFactory.d.ts +205 -0
- package/lib/esm/hierarchies/NodeSelectQueryFactory.d.ts.map +1 -0
- package/lib/esm/hierarchies/NodeSelectQueryFactory.js +463 -0
- package/lib/esm/hierarchies/NodeSelectQueryFactory.js.map +1 -0
- package/lib/esm/hierarchies/internal/ChildNodeObservablesCache.d.ts +40 -0
- package/lib/esm/hierarchies/internal/ChildNodeObservablesCache.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/ChildNodeObservablesCache.js +80 -0
- package/lib/esm/hierarchies/internal/ChildNodeObservablesCache.js.map +1 -0
- package/lib/esm/hierarchies/internal/Common.d.ts +20 -0
- package/lib/esm/hierarchies/internal/Common.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/Common.js +95 -0
- package/lib/esm/hierarchies/internal/Common.js.map +1 -0
- package/lib/esm/hierarchies/internal/EachValueFrom.d.ts +12 -0
- package/lib/esm/hierarchies/internal/EachValueFrom.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/EachValueFrom.js +104 -0
- package/lib/esm/hierarchies/internal/EachValueFrom.js.map +1 -0
- package/lib/esm/hierarchies/internal/FilteringHierarchyDefinition.d.ts +39 -0
- package/lib/esm/hierarchies/internal/FilteringHierarchyDefinition.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/FilteringHierarchyDefinition.js +176 -0
- package/lib/esm/hierarchies/internal/FilteringHierarchyDefinition.js.map +1 -0
- package/lib/esm/hierarchies/internal/LoggingUtils.d.ts +14 -0
- package/lib/esm/hierarchies/internal/LoggingUtils.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/LoggingUtils.js +50 -0
- package/lib/esm/hierarchies/internal/LoggingUtils.js.map +1 -0
- package/lib/esm/hierarchies/internal/SubscriptionScheduler.d.ts +17 -0
- package/lib/esm/hierarchies/internal/SubscriptionScheduler.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/SubscriptionScheduler.js +53 -0
- package/lib/esm/hierarchies/internal/SubscriptionScheduler.js.map +1 -0
- package/lib/esm/hierarchies/internal/TreeNodesReader.d.ts +37 -0
- package/lib/esm/hierarchies/internal/TreeNodesReader.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/TreeNodesReader.js +41 -0
- package/lib/esm/hierarchies/internal/TreeNodesReader.js.map +1 -0
- package/lib/esm/hierarchies/internal/operators/DetermineChildren.d.ts +11 -0
- package/lib/esm/hierarchies/internal/operators/DetermineChildren.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/operators/DetermineChildren.js +30 -0
- package/lib/esm/hierarchies/internal/operators/DetermineChildren.js.map +1 -0
- package/lib/esm/hierarchies/internal/operators/Grouping.d.ts +27 -0
- package/lib/esm/hierarchies/internal/operators/Grouping.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/operators/Grouping.js +156 -0
- package/lib/esm/hierarchies/internal/operators/Grouping.js.map +1 -0
- package/lib/esm/hierarchies/internal/operators/HideIfNoChildren.d.ts +11 -0
- package/lib/esm/hierarchies/internal/operators/HideIfNoChildren.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/operators/HideIfNoChildren.js +48 -0
- package/lib/esm/hierarchies/internal/operators/HideIfNoChildren.js.map +1 -0
- package/lib/esm/hierarchies/internal/operators/HideNodesInHierarchy.d.ts +11 -0
- package/lib/esm/hierarchies/internal/operators/HideNodesInHierarchy.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/operators/HideNodesInHierarchy.js +51 -0
- package/lib/esm/hierarchies/internal/operators/HideNodesInHierarchy.js.map +1 -0
- package/lib/esm/hierarchies/internal/operators/Partition.d.ts +6 -0
- package/lib/esm/hierarchies/internal/operators/Partition.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/operators/Partition.js +57 -0
- package/lib/esm/hierarchies/internal/operators/Partition.js.map +1 -0
- package/lib/esm/hierarchies/internal/operators/ReduceToMergeMap.d.ts +22 -0
- package/lib/esm/hierarchies/internal/operators/ReduceToMergeMap.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/operators/ReduceToMergeMap.js +46 -0
- package/lib/esm/hierarchies/internal/operators/ReduceToMergeMap.js.map +1 -0
- package/lib/esm/hierarchies/internal/operators/ReleaseMainThread.d.ts +7 -0
- package/lib/esm/hierarchies/internal/operators/ReleaseMainThread.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/operators/ReleaseMainThread.js +21 -0
- package/lib/esm/hierarchies/internal/operators/ReleaseMainThread.js.map +1 -0
- package/lib/esm/hierarchies/internal/operators/ShareReplayWithErrors.d.ts +9 -0
- package/lib/esm/hierarchies/internal/operators/ShareReplayWithErrors.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/operators/ShareReplayWithErrors.js +20 -0
- package/lib/esm/hierarchies/internal/operators/ShareReplayWithErrors.js.map +1 -0
- package/lib/esm/hierarchies/internal/operators/Sorting.d.ts +12 -0
- package/lib/esm/hierarchies/internal/operators/Sorting.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/operators/Sorting.js +22 -0
- package/lib/esm/hierarchies/internal/operators/Sorting.js.map +1 -0
- package/lib/esm/hierarchies/internal/operators/TapOnce.d.ts +4 -0
- package/lib/esm/hierarchies/internal/operators/TapOnce.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/operators/TapOnce.js +16 -0
- package/lib/esm/hierarchies/internal/operators/TapOnce.js.map +1 -0
- package/lib/esm/hierarchies/internal/operators/grouping/AutoExpand.d.ts +4 -0
- package/lib/esm/hierarchies/internal/operators/grouping/AutoExpand.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/operators/grouping/AutoExpand.js +23 -0
- package/lib/esm/hierarchies/internal/operators/grouping/AutoExpand.js.map +1 -0
- package/lib/esm/hierarchies/internal/operators/grouping/BaseClassGrouping.d.ts +10 -0
- package/lib/esm/hierarchies/internal/operators/grouping/BaseClassGrouping.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/operators/grouping/BaseClassGrouping.js +109 -0
- package/lib/esm/hierarchies/internal/operators/grouping/BaseClassGrouping.js.map +1 -0
- package/lib/esm/hierarchies/internal/operators/grouping/ClassGrouping.d.ts +6 -0
- package/lib/esm/hierarchies/internal/operators/grouping/ClassGrouping.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/operators/grouping/ClassGrouping.js +52 -0
- package/lib/esm/hierarchies/internal/operators/grouping/ClassGrouping.js.map +1 -0
- package/lib/esm/hierarchies/internal/operators/grouping/GroupHiding.d.ts +4 -0
- package/lib/esm/hierarchies/internal/operators/grouping/GroupHiding.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/operators/grouping/GroupHiding.js +50 -0
- package/lib/esm/hierarchies/internal/operators/grouping/GroupHiding.js.map +1 -0
- package/lib/esm/hierarchies/internal/operators/grouping/LabelGrouping.d.ts +5 -0
- package/lib/esm/hierarchies/internal/operators/grouping/LabelGrouping.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/operators/grouping/LabelGrouping.js +57 -0
- package/lib/esm/hierarchies/internal/operators/grouping/LabelGrouping.js.map +1 -0
- package/lib/esm/hierarchies/internal/operators/grouping/PropertiesGrouping.d.ts +31 -0
- package/lib/esm/hierarchies/internal/operators/grouping/PropertiesGrouping.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/operators/grouping/PropertiesGrouping.js +302 -0
- package/lib/esm/hierarchies/internal/operators/grouping/PropertiesGrouping.js.map +1 -0
- package/lib/esm/hierarchies/internal/operators/grouping/Shared.d.ts +5 -0
- package/lib/esm/hierarchies/internal/operators/grouping/Shared.d.ts.map +1 -0
- package/lib/esm/hierarchies/internal/operators/grouping/Shared.js +26 -0
- package/lib/esm/hierarchies/internal/operators/grouping/Shared.js.map +1 -0
- package/lib/esm/presentation-hierarchies.d.ts +11 -0
- package/lib/esm/presentation-hierarchies.d.ts.map +1 -0
- package/lib/esm/presentation-hierarchies.js +15 -0
- package/lib/esm/presentation-hierarchies.js.map +1 -0
- package/media/sample-hierarchy.png +0 -0
- package/package.json +71 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ChildNodeObservablesCache = void 0;
|
|
8
|
+
const core_bentley_1 = require("@itwin/core-bentley");
|
|
9
|
+
const HierarchyNodeKey_1 = require("../HierarchyNodeKey");
|
|
10
|
+
/** @internal */
|
|
11
|
+
class ChildNodeObservablesCache {
|
|
12
|
+
_map;
|
|
13
|
+
_props;
|
|
14
|
+
constructor(props) {
|
|
15
|
+
this._props = props;
|
|
16
|
+
this._map = new core_bentley_1.LRUDictionary(props.size, compareHierarchyNodeKeys);
|
|
17
|
+
}
|
|
18
|
+
createCacheKeys(props) {
|
|
19
|
+
function createVariationKey() {
|
|
20
|
+
const { instanceFilter, hierarchyLevelSizeLimit } = props;
|
|
21
|
+
if (instanceFilter === undefined && hierarchyLevelSizeLimit === undefined) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
return JSON.stringify({ instanceFilter, hierarchyLevelSizeLimit });
|
|
25
|
+
}
|
|
26
|
+
if (!props.parentNode) {
|
|
27
|
+
return { primaryKey: [], variationKey: createVariationKey() };
|
|
28
|
+
}
|
|
29
|
+
const parentKeys = props.parentNode.parentKeys;
|
|
30
|
+
return {
|
|
31
|
+
primaryKey: [...parentKeys, props.parentNode.key],
|
|
32
|
+
variationKey: createVariationKey(),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
getCacheAccessors(primaryKey, variationKey) {
|
|
36
|
+
const getMapEntry = (create) => {
|
|
37
|
+
let entry = this._map.get(primaryKey);
|
|
38
|
+
if (!entry && create) {
|
|
39
|
+
entry = { primary: undefined, variations: new core_bentley_1.LRUMap(this._props.variationsCount ?? 1) };
|
|
40
|
+
this._map.set(primaryKey, entry);
|
|
41
|
+
}
|
|
42
|
+
return entry;
|
|
43
|
+
};
|
|
44
|
+
if (variationKey) {
|
|
45
|
+
return {
|
|
46
|
+
get: () => getMapEntry(false)?.variations.get(variationKey),
|
|
47
|
+
set: (value) => {
|
|
48
|
+
getMapEntry(true).variations.set(variationKey, value);
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
get: () => getMapEntry(false)?.primary,
|
|
54
|
+
set: (value) => {
|
|
55
|
+
getMapEntry(true).primary = value;
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
set(requestProps, value) {
|
|
60
|
+
const { primaryKey, variationKey } = this.createCacheKeys(requestProps);
|
|
61
|
+
this.getCacheAccessors(primaryKey, variationKey).set(value);
|
|
62
|
+
}
|
|
63
|
+
get(requestProps) {
|
|
64
|
+
const { primaryKey, variationKey } = this.createCacheKeys(requestProps);
|
|
65
|
+
return this.getCacheAccessors(primaryKey, variationKey).get();
|
|
66
|
+
}
|
|
67
|
+
clear() {
|
|
68
|
+
this._map.clear();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.ChildNodeObservablesCache = ChildNodeObservablesCache;
|
|
72
|
+
function compareHierarchyNodeKeys(lhs, rhs) {
|
|
73
|
+
if (lhs.length !== rhs.length) {
|
|
74
|
+
return lhs.length - rhs.length;
|
|
75
|
+
}
|
|
76
|
+
for (let i = 0; i < lhs.length; ++i) {
|
|
77
|
+
const keysCompareResult = HierarchyNodeKey_1.HierarchyNodeKey.compare(lhs[i], rhs[i]);
|
|
78
|
+
if (keysCompareResult !== 0) {
|
|
79
|
+
return keysCompareResult;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return 0;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=ChildNodeObservablesCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChildNodeObservablesCache.js","sourceRoot":"","sources":["../../../../src/hierarchies/internal/ChildNodeObservablesCache.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 { Observable } from \"rxjs\";\nimport { LRUCache, LRUDictionary, LRUMap } from \"@itwin/core-bentley\";\nimport { ParsedHierarchyNode, ProcessedHierarchyNode } from \"../HierarchyNode\";\nimport { HierarchyNodeKey } from \"../HierarchyNodeKey\";\nimport { GetHierarchyNodesProps } from \"../HierarchyProvider\";\n\n/** @internal */\nexport type ParsedQueryNodesObservable = Observable<ParsedHierarchyNode>;\n\n/** @internal */\nexport type ProcessedNodesObservable = Observable<ProcessedHierarchyNode>;\n\n/** @internal */\nexport type CachedNodesObservableEntry =\n | { observable: ParsedQueryNodesObservable; processingStatus: \"none\" }\n | { observable: ProcessedNodesObservable; processingStatus: \"pre-processed\" };\n\n/** @internal */\nexport interface ChildNodesCacheEntry {\n /** Stores observables for the default case - no instance filter or custom limit for the hierarchy level. */\n primary: CachedNodesObservableEntry | undefined;\n /** Stores a limited number of variations with custom instance filter and/or custom limit for the hierarchy level. */\n variations: LRUCache<string, CachedNodesObservableEntry>;\n}\n\n/** @internal */\nexport interface ChildNodeObservablesCacheProps {\n size: number;\n variationsCount?: number;\n}\n\n/** @internal */\nexport class ChildNodeObservablesCache {\n private _map: LRUDictionary<HierarchyNodeKey[], ChildNodesCacheEntry>;\n private _props: ChildNodeObservablesCacheProps;\n\n public constructor(props: ChildNodeObservablesCacheProps) {\n this._props = props;\n this._map = new LRUDictionary<HierarchyNodeKey[], ChildNodesCacheEntry>(props.size, compareHierarchyNodeKeys);\n }\n\n private createCacheKeys(\n props: Omit<GetHierarchyNodesProps, \"parentNode\"> & { parentNode: { key: HierarchyNodeKey; parentKeys: HierarchyNodeKey[] } | undefined },\n ) {\n function createVariationKey() {\n const { instanceFilter, hierarchyLevelSizeLimit } = props;\n if (instanceFilter === undefined && hierarchyLevelSizeLimit === undefined) {\n return undefined;\n }\n return JSON.stringify({ instanceFilter, hierarchyLevelSizeLimit });\n }\n\n if (!props.parentNode) {\n return { primaryKey: [], variationKey: createVariationKey() };\n }\n\n const parentKeys = props.parentNode.parentKeys;\n\n return {\n primaryKey: [...parentKeys, props.parentNode.key],\n variationKey: createVariationKey(),\n };\n }\n\n private getCacheAccessors(primaryKey: HierarchyNodeKey[], variationKey?: string) {\n const getMapEntry = (create: boolean) => {\n let entry = this._map.get(primaryKey);\n if (!entry && create) {\n entry = { primary: undefined, variations: new LRUMap(this._props.variationsCount ?? 1) };\n this._map.set(primaryKey, entry);\n }\n return entry;\n };\n if (variationKey) {\n return {\n get: () => getMapEntry(false)?.variations.get(variationKey),\n set: (value: CachedNodesObservableEntry) => {\n getMapEntry(true)!.variations.set(variationKey, value);\n },\n };\n }\n return {\n get: () => getMapEntry(false)?.primary,\n set: (value: CachedNodesObservableEntry) => {\n getMapEntry(true)!.primary = value;\n },\n };\n }\n\n public set(requestProps: GetHierarchyNodesProps, value: CachedNodesObservableEntry) {\n const { primaryKey, variationKey } = this.createCacheKeys(requestProps);\n this.getCacheAccessors(primaryKey, variationKey).set(value);\n }\n\n public get(requestProps: GetHierarchyNodesProps): CachedNodesObservableEntry | undefined {\n const { primaryKey, variationKey } = this.createCacheKeys(requestProps);\n return this.getCacheAccessors(primaryKey, variationKey).get();\n }\n\n public clear() {\n this._map.clear();\n }\n}\n\nfunction compareHierarchyNodeKeys(lhs: HierarchyNodeKey[], rhs: HierarchyNodeKey[]) {\n if (lhs.length !== rhs.length) {\n return lhs.length - rhs.length;\n }\n for (let i = 0; i < lhs.length; ++i) {\n const keysCompareResult = HierarchyNodeKey.compare(lhs[i], rhs[i]);\n if (keysCompareResult !== 0) {\n return keysCompareResult;\n }\n }\n return 0;\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { HierarchyNode, ParentHierarchyNode, ParsedHierarchyNode, ProcessedCustomHierarchyNode, ProcessedInstanceHierarchyNode } from "../HierarchyNode";
|
|
2
|
+
/** @internal */
|
|
3
|
+
export declare const LOGGING_NAMESPACE = "Presentation.Hierarchies";
|
|
4
|
+
/** @internal */
|
|
5
|
+
export declare function mergeNodes<TNode extends ProcessedCustomHierarchyNode | ProcessedInstanceHierarchyNode>(lhs: TNode, rhs: TNode): TNode;
|
|
6
|
+
/** @internal */
|
|
7
|
+
export declare function hasChildren<TNode extends {
|
|
8
|
+
children?: boolean | Array<unknown>;
|
|
9
|
+
}>(node: TNode): boolean;
|
|
10
|
+
/** @internal */
|
|
11
|
+
export declare function createOperatorLoggingNamespace(operatorName: string): string;
|
|
12
|
+
/** @internal */
|
|
13
|
+
export declare function compareNodesByLabel<TLhsNode extends {
|
|
14
|
+
label: string;
|
|
15
|
+
}, TRhsNode extends {
|
|
16
|
+
label: string;
|
|
17
|
+
}>(lhs: TLhsNode, rhs: TRhsNode): number;
|
|
18
|
+
/** @internal */
|
|
19
|
+
export declare function createNodeIdentifierForLogging(node: ParentHierarchyNode | HierarchyNode | ParsedHierarchyNode | undefined): string;
|
|
20
|
+
//# sourceMappingURL=Common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Common.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/internal/Common.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,aAAa,EAGb,mBAAmB,EACnB,mBAAmB,EACnB,4BAA4B,EAC5B,8BAA8B,EAC/B,MAAM,kBAAkB,CAAC;AAG1B,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAuD5D,gBAAgB;AAChB,wBAAgB,UAAU,CAAC,KAAK,SAAS,4BAA4B,GAAG,8BAA8B,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,CAkBrI;AAED,gBAAgB;AAChB,wBAAgB,WAAW,CAAC,KAAK,SAAS;IAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAA;CAAE,EAAE,IAAI,EAAE,KAAK,WAE7F;AAED,gBAAgB;AAChB,wBAAgB,8BAA8B,CAAC,YAAY,EAAE,MAAM,UAElE;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,QAAQ,SAAS;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,SAAS;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAG,MAAM,CAEhJ;AAED,gBAAgB;AAEhB,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,mBAAmB,GAAG,aAAa,GAAG,mBAAmB,GAAG,SAAS,UAOzH"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.createNodeIdentifierForLogging = exports.compareNodesByLabel = exports.createOperatorLoggingNamespace = exports.hasChildren = exports.mergeNodes = exports.LOGGING_NAMESPACE = void 0;
|
|
11
|
+
const natural_compare_lite_1 = __importDefault(require("natural-compare-lite"));
|
|
12
|
+
const core_bentley_1 = require("@itwin/core-bentley");
|
|
13
|
+
const HierarchyNodeKey_1 = require("../HierarchyNodeKey");
|
|
14
|
+
/** @internal */
|
|
15
|
+
exports.LOGGING_NAMESPACE = "Presentation.Hierarchies";
|
|
16
|
+
function mergeNodeHandlingParams(lhs, rhs) {
|
|
17
|
+
if (!lhs && !rhs) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
const params = {
|
|
21
|
+
...(lhs?.hideIfNoChildren || rhs?.hideIfNoChildren ? { hideIfNoChildren: true } : undefined),
|
|
22
|
+
...(lhs?.hideInHierarchy || rhs?.hideInHierarchy ? { hideInHierarchy: true } : undefined),
|
|
23
|
+
...mergeByLabelParams(lhs?.grouping?.byLabel, rhs?.grouping?.byLabel),
|
|
24
|
+
};
|
|
25
|
+
return Object.keys(params).length > 0 ? params : undefined;
|
|
26
|
+
}
|
|
27
|
+
function mergeByLabelParams(lhs, rhs) {
|
|
28
|
+
if (lhs && typeof lhs === "object" && lhs.action === "merge" && rhs && typeof rhs === "object" && rhs.action === "merge" && lhs.groupId === rhs.groupId) {
|
|
29
|
+
return {
|
|
30
|
+
grouping: { byLabel: lhs },
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
function mergeNodeKeys(lhs, rhs) {
|
|
36
|
+
if (HierarchyNodeKey_1.HierarchyNodeKey.isCustom(lhs)) {
|
|
37
|
+
(0, core_bentley_1.assert)(HierarchyNodeKey_1.HierarchyNodeKey.isCustom(rhs));
|
|
38
|
+
return lhs === rhs ? lhs : `${lhs}+${rhs}`;
|
|
39
|
+
}
|
|
40
|
+
// istanbul ignore else
|
|
41
|
+
if (HierarchyNodeKey_1.HierarchyNodeKey.isInstances(lhs)) {
|
|
42
|
+
(0, core_bentley_1.assert)(HierarchyNodeKey_1.HierarchyNodeKey.isInstances(rhs));
|
|
43
|
+
return { type: "instances", instanceKeys: [...lhs.instanceKeys, ...rhs.instanceKeys] };
|
|
44
|
+
}
|
|
45
|
+
// https://github.com/microsoft/TypeScript/issues/21985
|
|
46
|
+
// istanbul ignore next
|
|
47
|
+
return ((x) => x)(lhs);
|
|
48
|
+
}
|
|
49
|
+
function mergeParentNodeKeys(lhsKeys, rhsKeys) {
|
|
50
|
+
const res = new Array();
|
|
51
|
+
for (let i = 0; i < lhsKeys.length && i < rhsKeys.length; ++i) {
|
|
52
|
+
if (!HierarchyNodeKey_1.HierarchyNodeKey.equals(lhsKeys[i], rhsKeys[i])) {
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
res.push(lhsKeys[i]);
|
|
56
|
+
}
|
|
57
|
+
return res;
|
|
58
|
+
}
|
|
59
|
+
/** @internal */
|
|
60
|
+
function mergeNodes(lhs, rhs) {
|
|
61
|
+
(0, core_bentley_1.assert)(typeof lhs.key === typeof rhs.key);
|
|
62
|
+
const mergedProcessingParams = mergeNodeHandlingParams(lhs.processingParams, rhs.processingParams);
|
|
63
|
+
const mergedChildren = lhs.children === true || rhs.children === true ? true : lhs.children === false && rhs.children === false ? false : undefined;
|
|
64
|
+
const mergedNode = {
|
|
65
|
+
...lhs,
|
|
66
|
+
...rhs,
|
|
67
|
+
label: lhs.label,
|
|
68
|
+
key: mergeNodeKeys(lhs.key, rhs.key),
|
|
69
|
+
parentKeys: mergeParentNodeKeys(lhs.parentKeys, rhs.parentKeys),
|
|
70
|
+
};
|
|
71
|
+
// Remove specific properties or change their values based on lhs and rhs nodes
|
|
72
|
+
mergedChildren !== undefined ? (mergedNode.children = mergedChildren) : delete mergedNode.children;
|
|
73
|
+
mergedProcessingParams ? (mergedNode.processingParams = mergedProcessingParams) : delete mergedNode.processingParams;
|
|
74
|
+
lhs.autoExpand || rhs.autoExpand ? (mergedNode.autoExpand = true) : delete mergedNode.autoExpand;
|
|
75
|
+
lhs.extendedData || rhs.extendedData ? (mergedNode.extendedData = { ...lhs.extendedData, ...rhs.extendedData }) : delete mergedNode.extendedData;
|
|
76
|
+
lhs.supportsFiltering && rhs.supportsFiltering ? (mergedNode.supportsFiltering = true) : delete mergedNode.supportsFiltering;
|
|
77
|
+
return mergedNode;
|
|
78
|
+
}
|
|
79
|
+
exports.mergeNodes = mergeNodes;
|
|
80
|
+
/** @internal */
|
|
81
|
+
function hasChildren(node) {
|
|
82
|
+
return node.children === true || (Array.isArray(node.children) && node.children.length > 0);
|
|
83
|
+
}
|
|
84
|
+
exports.hasChildren = hasChildren;
|
|
85
|
+
/** @internal */
|
|
86
|
+
function createOperatorLoggingNamespace(operatorName) {
|
|
87
|
+
return `${exports.LOGGING_NAMESPACE}.Operators.${operatorName}`;
|
|
88
|
+
}
|
|
89
|
+
exports.createOperatorLoggingNamespace = createOperatorLoggingNamespace;
|
|
90
|
+
/** @internal */
|
|
91
|
+
function compareNodesByLabel(lhs, rhs) {
|
|
92
|
+
return (0, natural_compare_lite_1.default)(lhs.label.toLocaleLowerCase(), rhs.label.toLocaleLowerCase());
|
|
93
|
+
}
|
|
94
|
+
exports.compareNodesByLabel = compareNodesByLabel;
|
|
95
|
+
/** @internal */
|
|
96
|
+
// istanbul ignore next
|
|
97
|
+
function createNodeIdentifierForLogging(node) {
|
|
98
|
+
if (!node) {
|
|
99
|
+
return "<root>";
|
|
100
|
+
}
|
|
101
|
+
const { label, key } = node;
|
|
102
|
+
const parentKeys = "parentKeys" in node ? node.parentKeys : "<unknown>";
|
|
103
|
+
return JSON.stringify({ label, key, parentKeys });
|
|
104
|
+
}
|
|
105
|
+
exports.createNodeIdentifierForLogging = createNodeIdentifierForLogging;
|
|
106
|
+
//# sourceMappingURL=Common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Common.js","sourceRoot":"","sources":["../../../../src/hierarchies/internal/Common.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 naturalCompare from \"natural-compare-lite\";\nimport { assert } from \"@itwin/core-bentley\";\nimport {\n HierarchyNode,\n HierarchyNodeLabelGroupingParams,\n InstanceHierarchyNodeProcessingParams,\n ParentHierarchyNode,\n ParsedHierarchyNode,\n ProcessedCustomHierarchyNode,\n ProcessedInstanceHierarchyNode,\n} from \"../HierarchyNode\";\nimport { HierarchyNodeKey, InstancesNodeKey } from \"../HierarchyNodeKey\";\n\n/** @internal */\nexport const LOGGING_NAMESPACE = \"Presentation.Hierarchies\";\n\nfunction mergeNodeHandlingParams(\n lhs: InstanceHierarchyNodeProcessingParams | undefined,\n rhs: InstanceHierarchyNodeProcessingParams | undefined,\n): InstanceHierarchyNodeProcessingParams | undefined {\n if (!lhs && !rhs) {\n return undefined;\n }\n const params = {\n ...(lhs?.hideIfNoChildren || rhs?.hideIfNoChildren ? { hideIfNoChildren: true } : undefined),\n ...(lhs?.hideInHierarchy || rhs?.hideInHierarchy ? { hideInHierarchy: true } : undefined),\n ...mergeByLabelParams(lhs?.grouping?.byLabel, rhs?.grouping?.byLabel),\n };\n return Object.keys(params).length > 0 ? params : undefined;\n}\n\nfunction mergeByLabelParams(\n lhs: HierarchyNodeLabelGroupingParams | undefined,\n rhs: HierarchyNodeLabelGroupingParams | undefined,\n): InstanceHierarchyNodeProcessingParams | undefined {\n if (lhs && typeof lhs === \"object\" && lhs.action === \"merge\" && rhs && typeof rhs === \"object\" && rhs.action === \"merge\" && lhs.groupId === rhs.groupId) {\n return {\n grouping: { byLabel: lhs },\n };\n }\n return undefined;\n}\n\nfunction mergeNodeKeys<TKey extends string | InstancesNodeKey>(lhs: TKey, rhs: TKey): TKey {\n if (HierarchyNodeKey.isCustom(lhs)) {\n assert(HierarchyNodeKey.isCustom(rhs));\n return lhs === rhs ? lhs : (`${lhs}+${rhs}` as TKey);\n }\n // istanbul ignore else\n if (HierarchyNodeKey.isInstances(lhs)) {\n assert(HierarchyNodeKey.isInstances(rhs));\n return { type: \"instances\", instanceKeys: [...lhs.instanceKeys, ...rhs.instanceKeys] } as TKey;\n }\n // https://github.com/microsoft/TypeScript/issues/21985\n // istanbul ignore next\n return ((x: never) => x)(lhs);\n}\n\nfunction mergeParentNodeKeys(lhsKeys: HierarchyNodeKey[], rhsKeys: HierarchyNodeKey[]): HierarchyNodeKey[] {\n const res = new Array<HierarchyNodeKey>();\n for (let i = 0; i < lhsKeys.length && i < rhsKeys.length; ++i) {\n if (!HierarchyNodeKey.equals(lhsKeys[i], rhsKeys[i])) {\n break;\n }\n res.push(lhsKeys[i]);\n }\n return res;\n}\n\n/** @internal */\nexport function mergeNodes<TNode extends ProcessedCustomHierarchyNode | ProcessedInstanceHierarchyNode>(lhs: TNode, rhs: TNode): TNode {\n assert(typeof lhs.key === typeof rhs.key);\n const mergedProcessingParams = mergeNodeHandlingParams(lhs.processingParams, rhs.processingParams);\n const mergedChildren = lhs.children === true || rhs.children === true ? true : lhs.children === false && rhs.children === false ? false : undefined;\n const mergedNode = {\n ...lhs,\n ...rhs,\n label: lhs.label,\n key: mergeNodeKeys(lhs.key, rhs.key),\n parentKeys: mergeParentNodeKeys(lhs.parentKeys, rhs.parentKeys),\n } as TNode;\n // Remove specific properties or change their values based on lhs and rhs nodes\n mergedChildren !== undefined ? (mergedNode.children = mergedChildren) : delete mergedNode.children;\n mergedProcessingParams ? (mergedNode.processingParams = mergedProcessingParams) : delete mergedNode.processingParams;\n lhs.autoExpand || rhs.autoExpand ? (mergedNode.autoExpand = true) : delete mergedNode.autoExpand;\n lhs.extendedData || rhs.extendedData ? (mergedNode.extendedData = { ...lhs.extendedData, ...rhs.extendedData }) : delete mergedNode.extendedData;\n lhs.supportsFiltering && rhs.supportsFiltering ? (mergedNode.supportsFiltering = true) : delete mergedNode.supportsFiltering;\n return mergedNode;\n}\n\n/** @internal */\nexport function hasChildren<TNode extends { children?: boolean | Array<unknown> }>(node: TNode) {\n return node.children === true || (Array.isArray(node.children) && node.children.length > 0);\n}\n\n/** @internal */\nexport function createOperatorLoggingNamespace(operatorName: string) {\n return `${LOGGING_NAMESPACE}.Operators.${operatorName}`;\n}\n\n/** @internal */\nexport function compareNodesByLabel<TLhsNode extends { label: string }, TRhsNode extends { label: string }>(lhs: TLhsNode, rhs: TRhsNode): number {\n return naturalCompare(lhs.label.toLocaleLowerCase(), rhs.label.toLocaleLowerCase());\n}\n\n/** @internal */\n// istanbul ignore next\nexport function createNodeIdentifierForLogging(node: ParentHierarchyNode | HierarchyNode | ParsedHierarchyNode | undefined) {\n if (!node) {\n return \"<root>\";\n }\n const { label, key } = node;\n const parentKeys = \"parentKeys\" in node ? node.parentKeys : \"<unknown>\";\n return JSON.stringify({ label, key, parentKeys });\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Observable } from "rxjs";
|
|
2
|
+
/**
|
|
3
|
+
* This is pretty much a combination of:
|
|
4
|
+
* - https://github.com/benlesh/rxjs-for-await/blob/94f9cf9cb015ac3700dfd1850eb81d36962eb70f/src/index.ts#L33,
|
|
5
|
+
* - https://github.com/ReactiveX/rxjs/blob/2587ee852eb43eeb0883a7787bac2944d823392b/packages/observable/src/observable.ts#L922.
|
|
6
|
+
*
|
|
7
|
+
* Our implementation uses a linked list rather than an array to store values, which is more efficient.
|
|
8
|
+
*
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export declare function eachValueFrom<T>(source: Observable<T>): AsyncIterableIterator<T>;
|
|
12
|
+
//# sourceMappingURL=EachValueFrom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EachValueFrom.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/internal/EachValueFrom.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAElC;;;;;;;;GAQG;AACH,wBAAuB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAqDvF"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.eachValueFrom = void 0;
|
|
8
|
+
/**
|
|
9
|
+
* This is pretty much a combination of:
|
|
10
|
+
* - https://github.com/benlesh/rxjs-for-await/blob/94f9cf9cb015ac3700dfd1850eb81d36962eb70f/src/index.ts#L33,
|
|
11
|
+
* - https://github.com/ReactiveX/rxjs/blob/2587ee852eb43eeb0883a7787bac2944d823392b/packages/observable/src/observable.ts#L922.
|
|
12
|
+
*
|
|
13
|
+
* Our implementation uses a linked list rather than an array to store values, which is more efficient.
|
|
14
|
+
*
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
async function* eachValueFrom(source) {
|
|
18
|
+
const deferreds = new Queue();
|
|
19
|
+
const values = new Queue();
|
|
20
|
+
let error;
|
|
21
|
+
let completed = false;
|
|
22
|
+
const subs = source.subscribe({
|
|
23
|
+
next: (value) => {
|
|
24
|
+
const deferred = deferreds.pop();
|
|
25
|
+
if (deferred) {
|
|
26
|
+
deferred.resolve({ value, done: false });
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
values.push(value);
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
error: (err) => {
|
|
33
|
+
error = err;
|
|
34
|
+
for (let deferred = deferreds.pop(); deferred !== undefined; deferred = deferreds.pop()) {
|
|
35
|
+
deferred.reject(err);
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
complete: () => {
|
|
39
|
+
completed = true;
|
|
40
|
+
for (let deferred = deferreds.pop(); deferred !== undefined; deferred = deferreds.pop()) {
|
|
41
|
+
deferred.resolve({ value: undefined, done: true });
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
try {
|
|
46
|
+
while (true) {
|
|
47
|
+
const value = values.pop();
|
|
48
|
+
if (value !== undefined) {
|
|
49
|
+
yield value;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (completed) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (error) {
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
const result = await new Promise((resolve, reject) => {
|
|
59
|
+
deferreds.push({ resolve, reject });
|
|
60
|
+
});
|
|
61
|
+
if (result.done) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
yield result.value;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
throw err;
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
subs.unsubscribe();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.eachValueFrom = eachValueFrom;
|
|
75
|
+
class QueueEntry {
|
|
76
|
+
value;
|
|
77
|
+
next;
|
|
78
|
+
constructor(value, next) {
|
|
79
|
+
this.value = value;
|
|
80
|
+
this.next = next;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
class Queue {
|
|
84
|
+
_front;
|
|
85
|
+
_back;
|
|
86
|
+
push(item) {
|
|
87
|
+
const entry = new QueueEntry(item);
|
|
88
|
+
if (this._back) {
|
|
89
|
+
this._back.next = entry;
|
|
90
|
+
}
|
|
91
|
+
this._back = entry;
|
|
92
|
+
if (!this._front) {
|
|
93
|
+
this._front = entry;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
pop() {
|
|
97
|
+
if (!this._front) {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
const value = this._front.value;
|
|
101
|
+
this._front = this._front.next;
|
|
102
|
+
if (!this._front) {
|
|
103
|
+
this._back = undefined;
|
|
104
|
+
}
|
|
105
|
+
return value;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=EachValueFrom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EachValueFrom.js","sourceRoot":"","sources":["../../../../src/hierarchies/internal/EachValueFrom.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 { Observable } from \"rxjs\";\n\n/**\n * This is pretty much a combination of:\n * - https://github.com/benlesh/rxjs-for-await/blob/94f9cf9cb015ac3700dfd1850eb81d36962eb70f/src/index.ts#L33,\n * - https://github.com/ReactiveX/rxjs/blob/2587ee852eb43eeb0883a7787bac2944d823392b/packages/observable/src/observable.ts#L922.\n *\n * Our implementation uses a linked list rather than an array to store values, which is more efficient.\n *\n * @internal\n */\nexport async function* eachValueFrom<T>(source: Observable<T>): AsyncIterableIterator<T> {\n const deferreds = new Queue<{ resolve: (value: IteratorResult<T>) => void; reject: (reason: unknown) => void }>();\n const values = new Queue<T>();\n let error;\n let completed = false;\n const subs = source.subscribe({\n next: (value) => {\n const deferred = deferreds.pop();\n if (deferred) {\n deferred.resolve({ value, done: false });\n } else {\n values.push(value);\n }\n },\n error: (err) => {\n error = err;\n for (let deferred = deferreds.pop(); deferred !== undefined; deferred = deferreds.pop()) {\n deferred.reject(err);\n }\n },\n complete: () => {\n completed = true;\n for (let deferred = deferreds.pop(); deferred !== undefined; deferred = deferreds.pop()) {\n deferred.resolve({ value: undefined, done: true });\n }\n },\n });\n try {\n while (true) {\n const value = values.pop();\n if (value !== undefined) {\n yield value;\n continue;\n }\n if (completed) {\n return;\n }\n if (error) {\n throw error;\n }\n const result = await new Promise<IteratorResult<T>>((resolve, reject) => {\n deferreds.push({ resolve, reject });\n });\n if (result.done) {\n return;\n }\n yield result.value;\n }\n } catch (err) {\n throw err;\n } finally {\n subs.unsubscribe();\n }\n}\n\nclass QueueEntry<T> {\n constructor(\n public readonly value: T,\n public next?: QueueEntry<T>,\n ) {}\n}\n\nclass Queue<T> {\n private _front?: QueueEntry<T>;\n private _back?: QueueEntry<T>;\n\n public push(item: T) {\n const entry = new QueueEntry<T>(item);\n if (this._back) {\n this._back.next = entry;\n }\n this._back = entry;\n if (!this._front) {\n this._front = entry;\n }\n }\n\n public pop(): T | undefined {\n if (!this._front) {\n return undefined;\n }\n const value = this._front.value;\n this._front = this._front.next;\n if (!this._front) {\n this._back = undefined;\n }\n return value;\n }\n}\n"]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ECClassHierarchyInspector, InstanceKey } from "@itwin/presentation-shared";
|
|
2
|
+
import { DefineHierarchyLevelProps, HierarchyDefinition, HierarchyLevelDefinition, InstanceNodesQueryDefinition, NodeParser, NodePostProcessor, NodePreProcessor } from "../HierarchyDefinition";
|
|
3
|
+
import { ProcessedHierarchyNode } from "../HierarchyNode";
|
|
4
|
+
import { HierarchyNodeIdentifiersPath } from "../HierarchyNodeIdentifier";
|
|
5
|
+
/** @internal */
|
|
6
|
+
export interface FilteringQueryBuilderProps {
|
|
7
|
+
classHierarchy: ECClassHierarchyInspector;
|
|
8
|
+
source: HierarchyDefinition;
|
|
9
|
+
nodeIdentifierPaths: HierarchyNodeIdentifiersPath[];
|
|
10
|
+
}
|
|
11
|
+
/** @internal */
|
|
12
|
+
export type FilteredHierarchyNode<TNode = ProcessedHierarchyNode> = TNode & {
|
|
13
|
+
isFilterTarget?: boolean;
|
|
14
|
+
filteredChildrenIdentifierPaths?: HierarchyNodeIdentifiersPath[];
|
|
15
|
+
};
|
|
16
|
+
/** @internal */
|
|
17
|
+
export declare class FilteringHierarchyDefinition implements HierarchyDefinition {
|
|
18
|
+
private _classHierarchy;
|
|
19
|
+
private _source;
|
|
20
|
+
private _nodeIdentifierPaths;
|
|
21
|
+
constructor(props: FilteringQueryBuilderProps);
|
|
22
|
+
get preProcessNode(): NodePreProcessor;
|
|
23
|
+
get postProcessNode(): NodePostProcessor;
|
|
24
|
+
get parseNode(): NodeParser;
|
|
25
|
+
defineHierarchyLevel(props: DefineHierarchyLevelProps & {
|
|
26
|
+
parentNode: FilteredHierarchyNode<DefineHierarchyLevelProps["parentNode"]> | undefined;
|
|
27
|
+
}): Promise<HierarchyLevelDefinition>;
|
|
28
|
+
private getFilteringProps;
|
|
29
|
+
}
|
|
30
|
+
/** @internal */
|
|
31
|
+
export declare const ECSQL_COLUMN_NAME_FilteredChildrenPaths = "FilteredChildrenPaths";
|
|
32
|
+
/** @internal */
|
|
33
|
+
export declare const ECSQL_COLUMN_NAME_IsFilterTarget = "IsFilterTarget";
|
|
34
|
+
/** @internal */
|
|
35
|
+
export declare function applyECInstanceIdsFilter(def: InstanceNodesQueryDefinition, matchingFilters: Array<{
|
|
36
|
+
id: InstanceKey;
|
|
37
|
+
childrenIdentifierPaths: HierarchyNodeIdentifiersPath[];
|
|
38
|
+
}>, isFilterTarget: boolean, isParentFilterTarget: boolean): InstanceNodesQueryDefinition;
|
|
39
|
+
//# sourceMappingURL=FilteringHierarchyDefinition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilteringHierarchyDefinition.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/internal/FilteringHierarchyDefinition.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAEL,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,EAExB,4BAA4B,EAC5B,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAmE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC3H,OAAO,EAA2B,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAGnG,gBAAgB;AAChB,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,yBAAyB,CAAC;IAC1C,MAAM,EAAE,mBAAmB,CAAC;IAC5B,mBAAmB,EAAE,4BAA4B,EAAE,CAAC;CACrD;AAED,gBAAgB;AAChB,MAAM,MAAM,qBAAqB,CAAC,KAAK,GAAG,sBAAsB,IAAI,KAAK,GAAG;IAC1E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,+BAA+B,CAAC,EAAE,4BAA4B,EAAE,CAAC;CAClE,CAAC;AAEF,gBAAgB;AAChB,qBAAa,4BAA6B,YAAW,mBAAmB;IACtE,OAAO,CAAC,eAAe,CAA4B;IACnD,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,oBAAoB,CAAiC;gBAE1C,KAAK,EAAE,0BAA0B;IAMpD,IAAW,cAAc,IAAI,gBAAgB,CAS5C;IAED,IAAW,eAAe,IAAI,iBAAiB,CAY9C;IAED,IAAW,SAAS,IAAI,UAAU,CASjC;IAEY,oBAAoB,CAC/B,KAAK,EAAE,yBAAyB,GAAG;QAAE,UAAU,EAAE,qBAAqB,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC,GAAG,SAAS,CAAA;KAAE,GAC5H,OAAO,CAAC,wBAAwB,CAAC;IAqDpC,OAAO,CAAC,iBAAiB;CAM1B;AA8DD,gBAAgB;AAEhB,eAAO,MAAM,uCAAuC,0BAA0B,CAAC;AAE/E,gBAAgB;AAEhB,eAAO,MAAM,gCAAgC,mBAAmB,CAAC;AAEjE,gBAAgB;AAChB,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,4BAA4B,EACjC,eAAe,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,WAAW,CAAC;IAAC,uBAAuB,EAAE,4BAA4B,EAAE,CAAA;CAAE,CAAC,EACpG,cAAc,EAAE,OAAO,EACvB,oBAAoB,EAAE,OAAO,GAC5B,4BAA4B,CA8B9B"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.applyECInstanceIdsFilter = exports.ECSQL_COLUMN_NAME_IsFilterTarget = exports.ECSQL_COLUMN_NAME_FilteredChildrenPaths = exports.FilteringHierarchyDefinition = void 0;
|
|
8
|
+
const HierarchyDefinition_1 = require("../HierarchyDefinition");
|
|
9
|
+
const HierarchyNode_1 = require("../HierarchyNode");
|
|
10
|
+
const HierarchyNodeIdentifier_1 = require("../HierarchyNodeIdentifier");
|
|
11
|
+
const TreeNodesReader_1 = require("./TreeNodesReader");
|
|
12
|
+
/** @internal */
|
|
13
|
+
class FilteringHierarchyDefinition {
|
|
14
|
+
_classHierarchy;
|
|
15
|
+
_source;
|
|
16
|
+
_nodeIdentifierPaths;
|
|
17
|
+
constructor(props) {
|
|
18
|
+
this._classHierarchy = props.classHierarchy;
|
|
19
|
+
this._source = props.source;
|
|
20
|
+
this._nodeIdentifierPaths = props.nodeIdentifierPaths;
|
|
21
|
+
}
|
|
22
|
+
get preProcessNode() {
|
|
23
|
+
return async (node) => {
|
|
24
|
+
const processedNode = this._source.preProcessNode ? await this._source.preProcessNode(node) : node;
|
|
25
|
+
if (processedNode?.processingParams?.hideInHierarchy && node.isFilterTarget) {
|
|
26
|
+
// we want to hide target nodes if they have `hideInHierarchy` param
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
return processedNode;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
get postProcessNode() {
|
|
33
|
+
return async (node) => {
|
|
34
|
+
const processedNode = this._source.postProcessNode ? await this._source.postProcessNode(node) : node;
|
|
35
|
+
if (
|
|
36
|
+
// instance nodes get the auto-expand flag in `parseNode`, but grouping ones need to be handled during post-processing
|
|
37
|
+
HierarchyNode_1.HierarchyNode.isClassGroupingNode(node) &&
|
|
38
|
+
node.children.some((child) => child.isFilterTarget || child.filteredChildrenIdentifierPaths)) {
|
|
39
|
+
return Object.assign(processedNode, { autoExpand: true });
|
|
40
|
+
}
|
|
41
|
+
return processedNode;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
get parseNode() {
|
|
45
|
+
return (row) => {
|
|
46
|
+
const isFilterTarget = !!row[exports.ECSQL_COLUMN_NAME_IsFilterTarget];
|
|
47
|
+
const parsedFilteredChildrenIdentifierPaths = row[exports.ECSQL_COLUMN_NAME_FilteredChildrenPaths]
|
|
48
|
+
? JSON.parse(row[exports.ECSQL_COLUMN_NAME_FilteredChildrenPaths])
|
|
49
|
+
: undefined;
|
|
50
|
+
const defaultNode = (this._source.parseNode ?? TreeNodesReader_1.defaultNodesParser)(row);
|
|
51
|
+
return applyFilterAttributes(defaultNode, parsedFilteredChildrenIdentifierPaths, isFilterTarget);
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
async defineHierarchyLevel(props) {
|
|
55
|
+
const sourceDefinitions = await this._source.defineHierarchyLevel(props);
|
|
56
|
+
const { filteredNodePaths, isParentFilterTarget } = this.getFilteringProps(props.parentNode);
|
|
57
|
+
if (!filteredNodePaths) {
|
|
58
|
+
return sourceDefinitions;
|
|
59
|
+
}
|
|
60
|
+
const filteredDefinitions = [];
|
|
61
|
+
await Promise.all(sourceDefinitions.map(async (definition) => {
|
|
62
|
+
let matchedDefinition;
|
|
63
|
+
if (HierarchyDefinition_1.HierarchyNodesDefinition.isCustomNode(definition)) {
|
|
64
|
+
matchedDefinition = await matchFilters(definition, { filteredNodePaths, isParentFilterTarget }, async (id) => {
|
|
65
|
+
if (!HierarchyNodeIdentifier_1.HierarchyNodeIdentifier.isCustomNodeIdentifier(id)) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
return id.key === definition.node.key;
|
|
69
|
+
}, (def, matchingFilters, isFilterTarget) => {
|
|
70
|
+
const filteredChildrenIdentifierPaths = matchingFilters.reduce((r, c) => [...r, ...c.childrenIdentifierPaths], new Array());
|
|
71
|
+
return {
|
|
72
|
+
...def,
|
|
73
|
+
node: applyFilterAttributes(def.node, filteredChildrenIdentifierPaths, isFilterTarget),
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
matchedDefinition = await matchFilters(definition, { filteredNodePaths, isParentFilterTarget }, async (id) => {
|
|
79
|
+
if (!HierarchyNodeIdentifier_1.HierarchyNodeIdentifier.isInstanceNodeIdentifier(id)) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
return this._classHierarchy.classDerivesFrom(id.className, definition.fullClassName);
|
|
83
|
+
}, (def, matchingFilters, isFilterTarget) => applyECInstanceIdsFilter(def, matchingFilters, isFilterTarget, !!isParentFilterTarget));
|
|
84
|
+
}
|
|
85
|
+
if (matchedDefinition) {
|
|
86
|
+
filteredDefinitions.push(matchedDefinition);
|
|
87
|
+
}
|
|
88
|
+
}));
|
|
89
|
+
return filteredDefinitions;
|
|
90
|
+
}
|
|
91
|
+
getFilteringProps(parentNode) {
|
|
92
|
+
if (!parentNode) {
|
|
93
|
+
return { filteredNodePaths: this._nodeIdentifierPaths, isParentFilterTarget: false };
|
|
94
|
+
}
|
|
95
|
+
return { filteredNodePaths: parentNode.filteredChildrenIdentifierPaths, isParentFilterTarget: parentNode.isFilterTarget };
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.FilteringHierarchyDefinition = FilteringHierarchyDefinition;
|
|
99
|
+
async function matchFilters(definition, filteringProps, predicate, matchedDefinitionProcessor) {
|
|
100
|
+
const { filteredNodePaths, isParentFilterTarget } = filteringProps;
|
|
101
|
+
let isFilterTarget = false;
|
|
102
|
+
const matchingFilters = [];
|
|
103
|
+
for (const path of filteredNodePaths) {
|
|
104
|
+
if (path.length === 0) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
const nodeId = path[0];
|
|
108
|
+
if (await predicate(nodeId)) {
|
|
109
|
+
let childrenIdentifierPaths = matchingFilters.find(({ id }) => HierarchyNodeIdentifier_1.HierarchyNodeIdentifier.equal(id, nodeId))?.childrenIdentifierPaths;
|
|
110
|
+
if (!childrenIdentifierPaths) {
|
|
111
|
+
childrenIdentifierPaths = [];
|
|
112
|
+
matchingFilters.push({
|
|
113
|
+
// ideally, `predicate` would act as a type guard to guarantee that `id` is `TIdentifier`, but at the moment
|
|
114
|
+
// async type guards aren't supported
|
|
115
|
+
id: nodeId,
|
|
116
|
+
childrenIdentifierPaths,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
const remainingPath = path.slice(1);
|
|
120
|
+
if (remainingPath.length > 0) {
|
|
121
|
+
childrenIdentifierPaths.push(remainingPath);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
isFilterTarget = true;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (isParentFilterTarget || matchingFilters.length > 0) {
|
|
129
|
+
return matchedDefinitionProcessor(definition, matchingFilters, isFilterTarget);
|
|
130
|
+
}
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
function applyFilterAttributes(node, filteredChildrenIdentifierPaths, isFilterTarget) {
|
|
134
|
+
const shouldAutoExpand = !!filteredChildrenIdentifierPaths?.some((path) => !!path.length);
|
|
135
|
+
return {
|
|
136
|
+
...node,
|
|
137
|
+
...(isFilterTarget ? { isFilterTarget } : undefined),
|
|
138
|
+
...(shouldAutoExpand ? { autoExpand: true } : undefined),
|
|
139
|
+
...(!!filteredChildrenIdentifierPaths?.length ? { filteredChildrenIdentifierPaths } : undefined),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/** @internal */
|
|
143
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
144
|
+
exports.ECSQL_COLUMN_NAME_FilteredChildrenPaths = "FilteredChildrenPaths";
|
|
145
|
+
/** @internal */
|
|
146
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
147
|
+
exports.ECSQL_COLUMN_NAME_IsFilterTarget = "IsFilterTarget";
|
|
148
|
+
/** @internal */
|
|
149
|
+
function applyECInstanceIdsFilter(def, matchingFilters, isFilterTarget, isParentFilterTarget) {
|
|
150
|
+
if (matchingFilters.length === 0) {
|
|
151
|
+
return def;
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
...def,
|
|
155
|
+
query: {
|
|
156
|
+
...def.query,
|
|
157
|
+
ctes: [
|
|
158
|
+
...(def.query.ctes ?? []),
|
|
159
|
+
// note: generally we'd use `VALUES (1,1),(2,2)`, but that doesn't work in ECSQL (https://github.com/iTwin/itwinjs-backlog/issues/865),
|
|
160
|
+
// so using UNION as a workaround
|
|
161
|
+
`FilteringInfo(ECInstanceId, FilteredChildrenPaths) AS (
|
|
162
|
+
${matchingFilters
|
|
163
|
+
.map(({ id: key, childrenIdentifierPaths }) => `VALUES (${key.id}, '${JSON.stringify(childrenIdentifierPaths)}')`)
|
|
164
|
+
.join(" UNION ALL ")}
|
|
165
|
+
)`,
|
|
166
|
+
],
|
|
167
|
+
ecsql: `
|
|
168
|
+
SELECT
|
|
169
|
+
[q].*,
|
|
170
|
+
${isFilterTarget ? "1" : "0"} AS [${exports.ECSQL_COLUMN_NAME_IsFilterTarget}],
|
|
171
|
+
[f].[FilteredChildrenPaths] AS [${exports.ECSQL_COLUMN_NAME_FilteredChildrenPaths}]
|
|
172
|
+
FROM (
|
|
173
|
+
${def.query.ecsql}
|
|
174
|
+
) [q]
|
|
175
|
+
${isParentFilterTarget ? "LEFT " : ""} JOIN FilteringInfo [f] ON [f].[ECInstanceId] = [q].[ECInstanceId]
|
|
176
|
+
`,
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
exports.applyECInstanceIdsFilter = applyECInstanceIdsFilter;
|
|
181
|
+
//# sourceMappingURL=FilteringHierarchyDefinition.js.map
|