@itwin/presentation-hierarchies 2.0.0-alpha.1 → 2.0.0-alpha.11
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 +356 -8
- package/README.md +4 -22
- package/lib/cjs/hierarchies/HierarchyMerge.d.ts +19 -0
- package/lib/cjs/hierarchies/HierarchyMerge.d.ts.map +1 -0
- package/lib/cjs/hierarchies/HierarchyMerge.js +43 -0
- package/lib/cjs/hierarchies/HierarchyMerge.js.map +1 -0
- package/lib/cjs/hierarchies/HierarchyNode.d.ts +17 -26
- package/lib/cjs/hierarchies/HierarchyNode.d.ts.map +1 -1
- package/lib/cjs/hierarchies/HierarchyNode.js +1 -21
- package/lib/cjs/hierarchies/HierarchyNode.js.map +1 -1
- package/lib/cjs/hierarchies/HierarchyNodeIdentifier.d.ts +1 -1
- package/lib/cjs/hierarchies/HierarchyNodeIdentifier.d.ts.map +1 -1
- package/lib/cjs/hierarchies/HierarchyNodeIdentifier.js.map +1 -1
- package/lib/cjs/hierarchies/HierarchyNodeKey.d.ts.map +1 -1
- package/lib/cjs/hierarchies/HierarchyNodeKey.js +8 -8
- package/lib/cjs/hierarchies/HierarchyNodeKey.js.map +1 -1
- package/lib/cjs/hierarchies/HierarchyProvider.d.ts +58 -33
- package/lib/cjs/hierarchies/HierarchyProvider.d.ts.map +1 -1
- package/lib/cjs/hierarchies/HierarchyProvider.js +46 -30
- package/lib/cjs/hierarchies/HierarchyProvider.js.map +1 -1
- package/lib/cjs/hierarchies/HierarchySearch.d.ts +169 -0
- package/lib/cjs/hierarchies/HierarchySearch.d.ts.map +1 -0
- package/lib/cjs/hierarchies/HierarchySearch.js +259 -0
- package/lib/cjs/hierarchies/HierarchySearch.js.map +1 -0
- package/lib/cjs/hierarchies/Logging.d.ts +1 -1
- package/lib/cjs/hierarchies/Logging.d.ts.map +1 -1
- package/lib/cjs/hierarchies/Logging.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/HierarchyCache.d.ts +1 -1
- package/lib/cjs/hierarchies/imodel/HierarchyCache.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/HierarchyCache.js +3 -3
- package/lib/cjs/hierarchies/imodel/HierarchyCache.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.d.ts +30 -9
- package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.d.ts +3 -3
- package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.d.ts +50 -15
- package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.js +203 -76
- package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts +1 -1
- package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.d.ts +5 -5
- package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.js +102 -43
- package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts +4 -4
- package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/SearchHierarchyDefinition.d.ts +35 -0
- package/lib/cjs/hierarchies/imodel/SearchHierarchyDefinition.d.ts.map +1 -0
- package/lib/cjs/hierarchies/imodel/SearchHierarchyDefinition.js +285 -0
- package/lib/cjs/hierarchies/imodel/SearchHierarchyDefinition.js.map +1 -0
- package/lib/cjs/hierarchies/imodel/TreeNodesReader.d.ts +9 -11
- package/lib/cjs/hierarchies/imodel/TreeNodesReader.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/TreeNodesReader.js +15 -6
- package/lib/cjs/hierarchies/imodel/TreeNodesReader.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/Utils.d.ts +1 -1
- package/lib/cjs/hierarchies/imodel/Utils.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/Utils.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.d.ts +2 -2
- package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/Grouping.d.ts +5 -5
- package/lib/cjs/hierarchies/imodel/operators/Grouping.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/Grouping.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.d.ts +1 -1
- package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.js +1 -0
- package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts +1 -1
- package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.d.ts +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts +4 -4
- package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.js +6 -5
- package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts +4 -4
- package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.js +4 -3
- package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.d.ts +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts +2 -2
- package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts +4 -4
- package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.js +22 -17
- package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.d.ts +2 -2
- package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.js.map +1 -1
- package/lib/cjs/hierarchies/internal/Common.d.ts +5 -2
- package/lib/cjs/hierarchies/internal/Common.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/Common.js +12 -1
- package/lib/cjs/hierarchies/internal/Common.js.map +1 -1
- package/lib/cjs/hierarchies/internal/EachValueFrom.d.ts +1 -1
- package/lib/cjs/hierarchies/internal/EachValueFrom.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/EachValueFrom.js +3 -0
- package/lib/cjs/hierarchies/internal/EachValueFrom.js.map +1 -1
- package/lib/cjs/hierarchies/internal/LoggingUtils.d.ts +1 -1
- package/lib/cjs/hierarchies/internal/LoggingUtils.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/LoggingUtils.js.map +1 -1
- package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.d.ts +19 -8
- package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.js +6 -5
- package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.js.map +1 -1
- package/lib/cjs/hierarchies/internal/SubscriptionScheduler.d.ts +1 -1
- package/lib/cjs/hierarchies/internal/SubscriptionScheduler.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/SubscriptionScheduler.js.map +1 -1
- package/lib/cjs/hierarchies/internal/operators/Partition.d.ts +2 -1
- package/lib/cjs/hierarchies/internal/operators/Partition.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/operators/Partition.js.map +1 -1
- package/lib/cjs/hierarchies/internal/operators/ReduceToMergeMap.d.ts +1 -1
- package/lib/cjs/hierarchies/internal/operators/ReduceToMergeMap.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/operators/ReduceToMergeMap.js.map +1 -1
- package/lib/cjs/hierarchies/internal/operators/ReleaseMainThread.d.ts +1 -1
- package/lib/cjs/hierarchies/internal/operators/ReleaseMainThread.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/operators/ReleaseMainThread.js.map +1 -1
- package/lib/cjs/hierarchies/internal/operators/ShareReplayWithErrors.d.ts +1 -1
- package/lib/cjs/hierarchies/internal/operators/ShareReplayWithErrors.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/operators/ShareReplayWithErrors.js.map +1 -1
- package/lib/cjs/hierarchies/internal/operators/Sorting.d.ts +1 -1
- package/lib/cjs/hierarchies/internal/operators/Sorting.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/operators/Sorting.js.map +1 -1
- package/lib/cjs/hierarchies/internal/operators/TapOnce.d.ts +1 -1
- package/lib/cjs/hierarchies/internal/operators/TapOnce.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/operators/TapOnce.js.map +1 -1
- package/lib/cjs/presentation-hierarchies.d.ts +22 -11
- package/lib/cjs/presentation-hierarchies.d.ts.map +1 -1
- package/lib/cjs/presentation-hierarchies.js +8 -6
- package/lib/cjs/presentation-hierarchies.js.map +1 -1
- package/lib/esm/hierarchies/HierarchyMerge.d.ts +19 -0
- package/lib/esm/hierarchies/HierarchyMerge.d.ts.map +1 -0
- package/lib/esm/hierarchies/HierarchyMerge.js +40 -0
- package/lib/esm/hierarchies/HierarchyMerge.js.map +1 -0
- package/lib/esm/hierarchies/HierarchyNode.d.ts +17 -26
- package/lib/esm/hierarchies/HierarchyNode.d.ts.map +1 -1
- package/lib/esm/hierarchies/HierarchyNode.js +1 -21
- package/lib/esm/hierarchies/HierarchyNode.js.map +1 -1
- package/lib/esm/hierarchies/HierarchyNodeIdentifier.d.ts +1 -1
- package/lib/esm/hierarchies/HierarchyNodeIdentifier.d.ts.map +1 -1
- package/lib/esm/hierarchies/HierarchyNodeIdentifier.js.map +1 -1
- package/lib/esm/hierarchies/HierarchyNodeKey.d.ts.map +1 -1
- package/lib/esm/hierarchies/HierarchyNodeKey.js +9 -9
- package/lib/esm/hierarchies/HierarchyNodeKey.js.map +1 -1
- package/lib/esm/hierarchies/HierarchyProvider.d.ts +58 -33
- package/lib/esm/hierarchies/HierarchyProvider.d.ts.map +1 -1
- package/lib/esm/hierarchies/HierarchyProvider.js +45 -29
- package/lib/esm/hierarchies/HierarchyProvider.js.map +1 -1
- package/lib/esm/hierarchies/HierarchySearch.d.ts +169 -0
- package/lib/esm/hierarchies/HierarchySearch.d.ts.map +1 -0
- package/lib/esm/hierarchies/HierarchySearch.js +254 -0
- package/lib/esm/hierarchies/HierarchySearch.js.map +1 -0
- package/lib/esm/hierarchies/Logging.d.ts +1 -1
- package/lib/esm/hierarchies/Logging.d.ts.map +1 -1
- package/lib/esm/hierarchies/Logging.js.map +1 -1
- package/lib/esm/hierarchies/imodel/HierarchyCache.d.ts +1 -1
- package/lib/esm/hierarchies/imodel/HierarchyCache.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/HierarchyCache.js +3 -3
- package/lib/esm/hierarchies/imodel/HierarchyCache.js.map +1 -1
- package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.d.ts +30 -9
- package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.js.map +1 -1
- package/lib/esm/hierarchies/imodel/IModelHierarchyNode.d.ts +3 -3
- package/lib/esm/hierarchies/imodel/IModelHierarchyNode.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/IModelHierarchyNode.js.map +1 -1
- package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.d.ts +50 -15
- package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.js +204 -78
- package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.js.map +1 -1
- package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts +1 -1
- package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.js +1 -1
- package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.js.map +1 -1
- package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.d.ts +5 -5
- package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.js +104 -45
- package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.js.map +1 -1
- package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts +4 -4
- package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.js.map +1 -1
- package/lib/esm/hierarchies/imodel/SearchHierarchyDefinition.d.ts +35 -0
- package/lib/esm/hierarchies/imodel/SearchHierarchyDefinition.d.ts.map +1 -0
- package/lib/esm/hierarchies/imodel/SearchHierarchyDefinition.js +279 -0
- package/lib/esm/hierarchies/imodel/SearchHierarchyDefinition.js.map +1 -0
- package/lib/esm/hierarchies/imodel/TreeNodesReader.d.ts +9 -11
- package/lib/esm/hierarchies/imodel/TreeNodesReader.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/TreeNodesReader.js +13 -5
- package/lib/esm/hierarchies/imodel/TreeNodesReader.js.map +1 -1
- package/lib/esm/hierarchies/imodel/Utils.d.ts +1 -1
- package/lib/esm/hierarchies/imodel/Utils.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/Utils.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/DetermineChildren.d.ts +2 -2
- package/lib/esm/hierarchies/imodel/operators/DetermineChildren.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/DetermineChildren.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/Grouping.d.ts +5 -5
- package/lib/esm/hierarchies/imodel/operators/Grouping.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/Grouping.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.d.ts +1 -1
- package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.js +1 -0
- package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts +1 -1
- package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/AutoExpand.d.ts +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/AutoExpand.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/AutoExpand.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts +4 -4
- package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.js +7 -6
- package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts +4 -4
- package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.js +5 -4
- package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.d.ts +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts +2 -2
- package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts +4 -4
- package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.js +23 -18
- package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/Shared.d.ts +2 -2
- package/lib/esm/hierarchies/imodel/operators/grouping/Shared.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/Shared.js.map +1 -1
- package/lib/esm/hierarchies/internal/Common.d.ts +5 -2
- package/lib/esm/hierarchies/internal/Common.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/Common.js +11 -1
- package/lib/esm/hierarchies/internal/Common.js.map +1 -1
- package/lib/esm/hierarchies/internal/EachValueFrom.d.ts +1 -1
- package/lib/esm/hierarchies/internal/EachValueFrom.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/EachValueFrom.js +3 -0
- package/lib/esm/hierarchies/internal/EachValueFrom.js.map +1 -1
- package/lib/esm/hierarchies/internal/LoggingUtils.d.ts +1 -1
- package/lib/esm/hierarchies/internal/LoggingUtils.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/LoggingUtils.js.map +1 -1
- package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.d.ts +19 -8
- package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.js +7 -6
- package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.js.map +1 -1
- package/lib/esm/hierarchies/internal/SubscriptionScheduler.d.ts +1 -1
- package/lib/esm/hierarchies/internal/SubscriptionScheduler.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/SubscriptionScheduler.js.map +1 -1
- package/lib/esm/hierarchies/internal/operators/Partition.d.ts +2 -1
- package/lib/esm/hierarchies/internal/operators/Partition.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/operators/Partition.js.map +1 -1
- package/lib/esm/hierarchies/internal/operators/ReduceToMergeMap.d.ts +1 -1
- package/lib/esm/hierarchies/internal/operators/ReduceToMergeMap.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/operators/ReduceToMergeMap.js.map +1 -1
- package/lib/esm/hierarchies/internal/operators/ReleaseMainThread.d.ts +1 -1
- package/lib/esm/hierarchies/internal/operators/ReleaseMainThread.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/operators/ReleaseMainThread.js.map +1 -1
- package/lib/esm/hierarchies/internal/operators/ShareReplayWithErrors.d.ts +1 -1
- package/lib/esm/hierarchies/internal/operators/ShareReplayWithErrors.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/operators/ShareReplayWithErrors.js.map +1 -1
- package/lib/esm/hierarchies/internal/operators/Sorting.d.ts +1 -1
- package/lib/esm/hierarchies/internal/operators/Sorting.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/operators/Sorting.js.map +1 -1
- package/lib/esm/hierarchies/internal/operators/TapOnce.d.ts +1 -1
- package/lib/esm/hierarchies/internal/operators/TapOnce.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/operators/TapOnce.js.map +1 -1
- package/lib/esm/presentation-hierarchies.d.ts +22 -11
- package/lib/esm/presentation-hierarchies.d.ts.map +1 -1
- package/lib/esm/presentation-hierarchies.js +7 -6
- package/lib/esm/presentation-hierarchies.js.map +1 -1
- package/package.json +19 -19
- package/lib/cjs/hierarchies/HierarchyFiltering.d.ts +0 -110
- package/lib/cjs/hierarchies/HierarchyFiltering.d.ts.map +0 -1
- package/lib/cjs/hierarchies/HierarchyFiltering.js +0 -215
- package/lib/cjs/hierarchies/HierarchyFiltering.js.map +0 -1
- package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.d.ts +0 -36
- package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.d.ts.map +0 -1
- package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.js +0 -274
- package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.js.map +0 -1
- package/lib/esm/hierarchies/HierarchyFiltering.d.ts +0 -110
- package/lib/esm/hierarchies/HierarchyFiltering.d.ts.map +0 -1
- package/lib/esm/hierarchies/HierarchyFiltering.js +0 -210
- package/lib/esm/hierarchies/HierarchyFiltering.js.map +0 -1
- package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.d.ts +0 -36
- package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.d.ts.map +0 -1
- package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.js +0 -268
- package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.js.map +0 -1
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*--------------------------------------------------------------------------------------------*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.createIModelHierarchyProvider = createIModelHierarchyProvider;
|
|
8
|
+
exports.createMergedIModelHierarchyProvider = createMergedIModelHierarchyProvider;
|
|
8
9
|
require("../internal/DisposePolyfill.js");
|
|
9
10
|
const rxjs_1 = require("rxjs");
|
|
10
11
|
const core_bentley_1 = require("@itwin/core-bentley");
|
|
@@ -12,6 +13,7 @@ const presentation_shared_1 = require("@itwin/presentation-shared");
|
|
|
12
13
|
const HierarchyErrors_js_1 = require("../HierarchyErrors.js");
|
|
13
14
|
const HierarchyNode_js_1 = require("../HierarchyNode.js");
|
|
14
15
|
const HierarchyNodeKey_js_1 = require("../HierarchyNodeKey.js");
|
|
16
|
+
const HierarchySearch_js_1 = require("../HierarchySearch.js");
|
|
15
17
|
const Common_js_1 = require("../internal/Common.js");
|
|
16
18
|
const EachValueFrom_js_1 = require("../internal/EachValueFrom.js");
|
|
17
19
|
const LoggingUtils_js_1 = require("../internal/LoggingUtils.js");
|
|
@@ -21,7 +23,6 @@ const ShareReplayWithErrors_js_1 = require("../internal/operators/ShareReplayWit
|
|
|
21
23
|
const Sorting_js_1 = require("../internal/operators/Sorting.js");
|
|
22
24
|
const RxjsHierarchyDefinition_js_1 = require("../internal/RxjsHierarchyDefinition.js");
|
|
23
25
|
const SubscriptionScheduler_js_1 = require("../internal/SubscriptionScheduler.js");
|
|
24
|
-
const FilteringHierarchyDefinition_js_1 = require("./FilteringHierarchyDefinition.js");
|
|
25
26
|
const HierarchyCache_js_1 = require("./HierarchyCache.js");
|
|
26
27
|
const IModelHierarchyDefinition_js_1 = require("./IModelHierarchyDefinition.js");
|
|
27
28
|
const NodeSelectQueryFactory_js_1 = require("./NodeSelectQueryFactory.js");
|
|
@@ -29,6 +30,7 @@ const DetermineChildren_js_1 = require("./operators/DetermineChildren.js");
|
|
|
29
30
|
const Grouping_js_1 = require("./operators/Grouping.js");
|
|
30
31
|
const HideIfNoChildren_js_1 = require("./operators/HideIfNoChildren.js");
|
|
31
32
|
const HideNodesInHierarchy_js_1 = require("./operators/HideNodesInHierarchy.js");
|
|
33
|
+
const SearchHierarchyDefinition_js_1 = require("./SearchHierarchyDefinition.js");
|
|
32
34
|
const TreeNodesReader_js_1 = require("./TreeNodesReader.js");
|
|
33
35
|
const LOGGING_NAMESPACE = `${Common_js_1.LOGGING_NAMESPACE}.IModelHierarchyProvider`;
|
|
34
36
|
const LOGGING_NAMESPACE_INTERNAL = `${Common_js_1.LOGGING_NAMESPACE_INTERNAL}.IModelHierarchyProvider`;
|
|
@@ -36,33 +38,57 @@ const LOGGING_NAMESPACE_PERFORMANCE = `${Common_js_1.LOGGING_NAMESPACE_PERFORMAN
|
|
|
36
38
|
const DEFAULT_QUERY_CONCURRENCY = 10;
|
|
37
39
|
const DEFAULT_QUERY_CACHE_SIZE = 1;
|
|
38
40
|
/**
|
|
39
|
-
* Creates an instance of `HierarchyProvider` that creates a hierarchy based on given iModel and
|
|
41
|
+
* Creates an instance of `HierarchyProvider` that creates a hierarchy based on given the iModel and
|
|
40
42
|
* a hierarchy definition, which defines each hierarchy level through ECSQL queries.
|
|
41
43
|
*
|
|
42
44
|
* @public
|
|
43
45
|
*/
|
|
44
46
|
function createIModelHierarchyProvider(props) {
|
|
47
|
+
const { imodelAccess, imodelChanged, ...restProps } = props;
|
|
48
|
+
return createMergedIModelHierarchyProvider({ ...restProps, imodels: [{ imodelAccess, imodelChanged }] });
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Creates an instance of `HierarchyProvider` that creates a hierarchy based on multiple version of **the same** iModel
|
|
52
|
+
* and a hierarchy definition, which defines each hierarchy level through ECSQL queries.
|
|
53
|
+
*
|
|
54
|
+
* **Warning:** This is an experimental API that **should not be used in production**.
|
|
55
|
+
*
|
|
56
|
+
* @alpha
|
|
57
|
+
*/
|
|
58
|
+
function createMergedIModelHierarchyProvider(props) {
|
|
45
59
|
return new IModelHierarchyProviderImpl(props);
|
|
46
60
|
}
|
|
47
61
|
class IModelHierarchyProviderImpl {
|
|
48
|
-
|
|
62
|
+
_imodels;
|
|
49
63
|
_hierarchyChanged;
|
|
50
64
|
_valuesFormatter;
|
|
51
65
|
_sourceHierarchyDefinition;
|
|
52
66
|
_activeHierarchyDefinition;
|
|
53
67
|
_localizedStrings;
|
|
54
|
-
|
|
68
|
+
_queryConcurrency;
|
|
69
|
+
_querySchedulers;
|
|
55
70
|
_nodesCache;
|
|
56
71
|
_unsubscribe;
|
|
57
72
|
_dispose = new rxjs_1.Subject();
|
|
73
|
+
#componentId;
|
|
74
|
+
#componentName;
|
|
75
|
+
#sourceName;
|
|
58
76
|
constructor(props) {
|
|
59
|
-
|
|
77
|
+
if (props.imodels.length === 0) {
|
|
78
|
+
throw new Error(`Creating an iModel hierarchy provider requires at least one iModel.`);
|
|
79
|
+
}
|
|
80
|
+
this.#componentId = core_bentley_1.Guid.createValue();
|
|
81
|
+
this.#componentName = "IModelHierarchyProviderImpl";
|
|
82
|
+
/* c8 ignore next */
|
|
83
|
+
this.#sourceName = props.sourceName ?? `${this.#componentName}:${this.#componentId}`;
|
|
84
|
+
this._imodels = props.imodels;
|
|
60
85
|
this._hierarchyChanged = new core_bentley_1.BeEvent();
|
|
61
86
|
this._activeHierarchyDefinition = this._sourceHierarchyDefinition = (0, RxjsHierarchyDefinition_js_1.getRxjsHierarchyDefinition)(props.hierarchyDefinition);
|
|
62
|
-
this._valuesFormatter = props
|
|
63
|
-
this._localizedStrings = { other: "Other", unspecified: "Not specified", ...props
|
|
64
|
-
this.
|
|
65
|
-
this.
|
|
87
|
+
this._valuesFormatter = props.formatter ?? (0, presentation_shared_1.createDefaultValueFormatter)();
|
|
88
|
+
this._localizedStrings = { other: "Other", unspecified: "Not specified", ...props.localizedStrings };
|
|
89
|
+
this._queryConcurrency = props.queryConcurrency ?? DEFAULT_QUERY_CONCURRENCY;
|
|
90
|
+
this._querySchedulers = new Map();
|
|
91
|
+
this.setHierarchySearch(props.search);
|
|
66
92
|
const queryCacheSize = props.queryCacheSize ?? DEFAULT_QUERY_CACHE_SIZE;
|
|
67
93
|
if (queryCacheSize !== 0) {
|
|
68
94
|
this._nodesCache = new HierarchyCache_js_1.HierarchyCache({
|
|
@@ -71,11 +97,18 @@ class IModelHierarchyProviderImpl {
|
|
|
71
97
|
variationsCount: 1,
|
|
72
98
|
});
|
|
73
99
|
}
|
|
74
|
-
|
|
75
|
-
|
|
100
|
+
const imodelChangeSubscription = (0, rxjs_1.from)(this._imodels)
|
|
101
|
+
.pipe((0, rxjs_1.mergeMap)(({ imodelAccess, imodelChanged }) => imodelChanged
|
|
102
|
+
? (0, rxjs_1.fromEventPattern)((handler) => imodelChanged.addListener(handler), (handler) => imodelChanged.removeListener(handler), () => imodelAccess)
|
|
103
|
+
: rxjs_1.EMPTY))
|
|
104
|
+
.subscribe(({ imodelKey }) => {
|
|
105
|
+
this.invalidateHierarchyCache(`Data source changed: "${imodelKey}"`);
|
|
76
106
|
this._dispose.next();
|
|
77
|
-
this._hierarchyChanged.raiseEvent();
|
|
107
|
+
this._hierarchyChanged.raiseEvent({});
|
|
78
108
|
});
|
|
109
|
+
this._unsubscribe = () => {
|
|
110
|
+
imodelChangeSubscription.unsubscribe();
|
|
111
|
+
};
|
|
79
112
|
}
|
|
80
113
|
[Symbol.dispose]() {
|
|
81
114
|
this._dispose.next();
|
|
@@ -88,6 +121,17 @@ class IModelHierarchyProviderImpl {
|
|
|
88
121
|
get hierarchyChanged() {
|
|
89
122
|
return this._hierarchyChanged;
|
|
90
123
|
}
|
|
124
|
+
getQueryScheduler(imodelKey) {
|
|
125
|
+
let scheduler = this._querySchedulers.get(imodelKey);
|
|
126
|
+
if (!scheduler) {
|
|
127
|
+
scheduler = new SubscriptionScheduler_js_1.SubscriptionScheduler(this._queryConcurrency);
|
|
128
|
+
this._querySchedulers.set(imodelKey, scheduler);
|
|
129
|
+
}
|
|
130
|
+
return scheduler;
|
|
131
|
+
}
|
|
132
|
+
getPrimaryIModelAccess() {
|
|
133
|
+
return this._imodels[this._imodels.length - 1].imodelAccess;
|
|
134
|
+
}
|
|
91
135
|
invalidateHierarchyCache(reason) {
|
|
92
136
|
(0, LoggingUtils_js_1.doLog)({
|
|
93
137
|
category: `${LOGGING_NAMESPACE}.Events`,
|
|
@@ -103,23 +147,24 @@ class IModelHierarchyProviderImpl {
|
|
|
103
147
|
this._valuesFormatter = formatter ?? (0, presentation_shared_1.createDefaultValueFormatter)();
|
|
104
148
|
this._hierarchyChanged.raiseEvent({ formatterChange: { newFormatter: this._valuesFormatter } });
|
|
105
149
|
}
|
|
106
|
-
|
|
150
|
+
setHierarchySearch(props) {
|
|
107
151
|
if (!props) {
|
|
108
152
|
if (this._sourceHierarchyDefinition !== this._activeHierarchyDefinition) {
|
|
109
153
|
this._activeHierarchyDefinition = this._sourceHierarchyDefinition;
|
|
110
|
-
this.invalidateHierarchyCache("Hierarchy
|
|
154
|
+
this.invalidateHierarchyCache("Hierarchy search reset");
|
|
111
155
|
}
|
|
112
|
-
this._hierarchyChanged.raiseEvent({
|
|
156
|
+
this._hierarchyChanged.raiseEvent({ searchChange: { newSearch: undefined } });
|
|
113
157
|
return;
|
|
114
158
|
}
|
|
115
|
-
this._activeHierarchyDefinition = new
|
|
116
|
-
imodelAccess: this.
|
|
159
|
+
this._activeHierarchyDefinition = new SearchHierarchyDefinition_js_1.SearchHierarchyDefinition({
|
|
160
|
+
imodelAccess: this.getPrimaryIModelAccess(),
|
|
117
161
|
source: this._sourceHierarchyDefinition,
|
|
118
|
-
|
|
162
|
+
sourceName: this.#sourceName,
|
|
163
|
+
targetPaths: props.paths,
|
|
119
164
|
});
|
|
120
|
-
this.invalidateHierarchyCache("Hierarchy
|
|
165
|
+
this.invalidateHierarchyCache("Hierarchy search set");
|
|
121
166
|
this._dispose.next();
|
|
122
|
-
this._hierarchyChanged.raiseEvent({
|
|
167
|
+
this._hierarchyChanged.raiseEvent({ searchChange: { newSearch: props } });
|
|
123
168
|
}
|
|
124
169
|
onGroupingNodeCreated(groupingNode, props) {
|
|
125
170
|
this._nodesCache?.set({ ...props, parentNode: groupingNode }, { observable: (0, rxjs_1.from)(groupingNode.children), processingStatus: "pre-processed" });
|
|
@@ -130,44 +175,53 @@ class IModelHierarchyProviderImpl {
|
|
|
130
175
|
category: LOGGING_NAMESPACE_PERFORMANCE,
|
|
131
176
|
message: /* c8 ignore next */ () => `[${requestContext.requestId}] Requesting hierarchy level definitions for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
132
177
|
});
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
if (parentNode && HierarchyNode_js_1.HierarchyNode.isInstancesNode(parentNode)) {
|
|
138
|
-
parentNode = {
|
|
139
|
-
...parentNode,
|
|
140
|
-
key: {
|
|
141
|
-
...parentNode.key,
|
|
142
|
-
instanceKeys: parentNode.key.instanceKeys.filter((ik) => !ik.imodelKey || ik.imodelKey === this._imodelAccess.imodelKey),
|
|
143
|
-
},
|
|
144
|
-
};
|
|
145
|
-
(0, core_bentley_1.assert)(HierarchyNodeKey_js_1.HierarchyNodeKey.isInstances(parentNode.key));
|
|
146
|
-
if (parentNode.key.instanceKeys.length === 0) {
|
|
178
|
+
return (0, rxjs_1.from)(this._imodels).pipe((0, rxjs_1.mergeMap)(({ imodelAccess }, imodelAccessIndex) => {
|
|
179
|
+
let parentNode = props.parentNode;
|
|
180
|
+
if (parentNode && HierarchyNode_js_1.HierarchyNode.isGeneric(parentNode) && parentNode.key.source && parentNode.key.source !== this.#sourceName) {
|
|
147
181
|
return rxjs_1.EMPTY;
|
|
148
182
|
}
|
|
149
|
-
|
|
150
|
-
|
|
183
|
+
if (parentNode && HierarchyNode_js_1.HierarchyNode.isInstancesNode(parentNode)) {
|
|
184
|
+
parentNode = {
|
|
185
|
+
...parentNode,
|
|
186
|
+
key: {
|
|
187
|
+
...parentNode.key,
|
|
188
|
+
instanceKeys: parentNode.key.instanceKeys.filter((ik) => !ik.imodelKey || ik.imodelKey === imodelAccess.imodelKey),
|
|
189
|
+
},
|
|
190
|
+
};
|
|
191
|
+
(0, core_bentley_1.assert)(HierarchyNodeKey_js_1.HierarchyNodeKey.isInstances(parentNode.key));
|
|
192
|
+
if (parentNode.key.instanceKeys.length === 0) {
|
|
193
|
+
return rxjs_1.EMPTY;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return this._activeHierarchyDefinition.defineHierarchyLevel({ ...defineHierarchyLevelProps, parentNode, imodelAccess }).pipe((0, rxjs_1.mergeAll)(), (0, rxjs_1.map)(
|
|
197
|
+
/* Using `as` to work around TS not understanding that `{ x: A, y: B | C }` is the same as `{ x: A } & ({ y: B } | { y: C })` */
|
|
198
|
+
(hierarchyNodesDefinition) => ({ imodelAccess, imodelAccessIndex, hierarchyNodesDefinition })));
|
|
199
|
+
}), (0, rxjs_1.finalize)(() => (0, LoggingUtils_js_1.doLog)({
|
|
151
200
|
category: LOGGING_NAMESPACE_PERFORMANCE,
|
|
152
201
|
message: /* c8 ignore next */ () => `[${requestContext.requestId}] Received all hierarchy level definitions for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
153
202
|
})));
|
|
154
203
|
}
|
|
155
204
|
createSourceNodesObservable(props) {
|
|
156
205
|
// pipe definitions to nodes and put "share replay" on it
|
|
157
|
-
return this.createHierarchyLevelDefinitionsObservable(props).pipe((0, rxjs_1.mergeMap)((def) => {
|
|
206
|
+
return this.createHierarchyLevelDefinitionsObservable(props).pipe((0, rxjs_1.mergeMap)(({ imodelAccess, imodelAccessIndex, hierarchyNodesDefinition: def }) => (0, rxjs_1.defer)(() => {
|
|
158
207
|
if (IModelHierarchyDefinition_js_1.HierarchyNodesDefinition.isGenericNode(def)) {
|
|
159
|
-
return (0, rxjs_1.of)({
|
|
208
|
+
return (0, rxjs_1.of)({
|
|
209
|
+
...def.node,
|
|
210
|
+
key: { type: "generic", id: def.node.key, source: this.#sourceName },
|
|
211
|
+
});
|
|
160
212
|
}
|
|
161
|
-
return this.
|
|
162
|
-
queryExecutor:
|
|
213
|
+
return this.getQueryScheduler(imodelAccess.imodelKey).scheduleSubscription((0, rxjs_1.of)(def.query).pipe((0, rxjs_1.map)((query) => createInstanceKeysFilteredQuery(query, props.targetInstanceKeys)), (0, rxjs_1.mergeMap)((query) => (0, TreeNodesReader_js_1.readNodes)({
|
|
214
|
+
queryExecutor: imodelAccess,
|
|
163
215
|
query,
|
|
164
216
|
limit: props.hierarchyLevelSizeLimit,
|
|
165
|
-
parser: this._activeHierarchyDefinition.parseNode
|
|
217
|
+
parser: this._activeHierarchyDefinition.parseNode
|
|
218
|
+
? ({ row }) => this._activeHierarchyDefinition.parseNode({ row, parentNode: props.parentNode, imodelKey: imodelAccess.imodelKey })
|
|
219
|
+
: undefined,
|
|
166
220
|
})), (0, rxjs_1.map)((node) => ({
|
|
167
221
|
...node,
|
|
168
|
-
key: { ...node.key, instanceKeys: node.key.instanceKeys.map((key) => ({ ...key, imodelKey:
|
|
222
|
+
key: { ...node.key, instanceKeys: node.key.instanceKeys.map((key) => ({ ...key, imodelKey: imodelAccess.imodelKey })) },
|
|
169
223
|
}))));
|
|
170
|
-
}), (0, rxjs_1.finalize)(() => (0, LoggingUtils_js_1.doLog)({
|
|
224
|
+
}).pipe((0, rxjs_1.map)((node) => ({ imodelAccess, imodelAccessIndex, node })))), mergeNodes, (0, rxjs_1.map)(({ node }) => node), (0, rxjs_1.finalize)(() => (0, LoggingUtils_js_1.doLog)({
|
|
171
225
|
category: LOGGING_NAMESPACE_PERFORMANCE,
|
|
172
226
|
message: /* c8 ignore next */ () => `[${props.requestContext.requestId}] Read all child nodes ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
173
227
|
})), (0, ShareReplayWithErrors_js_1.shareReplayWithErrors)());
|
|
@@ -181,7 +235,8 @@ class IModelHierarchyProviderImpl {
|
|
|
181
235
|
// format `ConcatenatedValue` labels into string labels
|
|
182
236
|
(0, rxjs_1.mergeMap)((node) => applyLabelsFormatting(node, this._valuesFormatter)),
|
|
183
237
|
// we have `ProcessedHierarchyNode` from here
|
|
184
|
-
|
|
238
|
+
// let consumers step-in
|
|
239
|
+
preProcessNodes(this._activeHierarchyDefinition, props.parentNode),
|
|
185
240
|
// process hiding
|
|
186
241
|
(0, HideIfNoChildren_js_1.createHideIfNoChildrenOperator)((n) => this.getChildNodesObservables({ parentNode: n, requestContext: props.requestContext }).hasNodes), (0, HideNodesInHierarchy_js_1.createHideNodesInHierarchyOperator)(
|
|
187
242
|
// note: for child nodes created because of hidden parent, we want to use parent's request props (instance filter, limit)
|
|
@@ -191,19 +246,17 @@ class IModelHierarchyProviderImpl {
|
|
|
191
246
|
})));
|
|
192
247
|
}
|
|
193
248
|
createProcessedNodesObservable(preprocessedNodesObservable, props) {
|
|
194
|
-
return preprocessedNodesObservable.pipe((0, Grouping_js_1.createGroupingOperator)(this.
|
|
249
|
+
return preprocessedNodesObservable.pipe((0, Grouping_js_1.createGroupingOperator)(this.getPrimaryIModelAccess(), props.parentNode, this._valuesFormatter, this._localizedStrings, undefined, (gn) => this.onGroupingNodeCreated(gn, props)), (0, rxjs_1.finalize)(() => (0, LoggingUtils_js_1.doLog)({
|
|
195
250
|
category: LOGGING_NAMESPACE_PERFORMANCE,
|
|
196
251
|
message: /* c8 ignore next */ () => `[${props.requestContext.requestId}] Finished grouping child nodes for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
197
252
|
})));
|
|
198
253
|
}
|
|
199
254
|
createFinalizedNodesObservable(processedNodesObservable, props) {
|
|
200
|
-
return processedNodesObservable.pipe((0, DetermineChildren_js_1.createDetermineChildrenOperator)((n) => this.getChildNodesObservables({ parentNode: n, requestContext: props.requestContext }).hasNodes), postProcessNodes(this._activeHierarchyDefinition), Sorting_js_1.sortNodesByLabelOperator, (0, rxjs_1.map)((n) => {
|
|
255
|
+
return processedNodesObservable.pipe((0, DetermineChildren_js_1.createDetermineChildrenOperator)((n) => this.getChildNodesObservables({ parentNode: n, requestContext: props.requestContext }).hasNodes), postProcessNodes(this._activeHierarchyDefinition, props.parentNode), Sorting_js_1.sortNodesByLabelOperator, (0, rxjs_1.map)((n) => {
|
|
201
256
|
if ("processingParams" in n) {
|
|
202
257
|
delete n.processingParams;
|
|
203
258
|
}
|
|
204
|
-
return
|
|
205
|
-
children: (0, Common_js_1.hasChildren)(n),
|
|
206
|
-
});
|
|
259
|
+
return { ...n, children: (0, Common_js_1.hasChildren)(n) };
|
|
207
260
|
}), (0, rxjs_1.takeUntil)(this._dispose), (0, rxjs_1.finalize)(() => (0, LoggingUtils_js_1.doLog)({
|
|
208
261
|
category: LOGGING_NAMESPACE_PERFORMANCE,
|
|
209
262
|
message: /* c8 ignore next */ () => `[${props.requestContext.requestId}] Finished finalizing child nodes for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
@@ -237,13 +290,13 @@ class IModelHierarchyProviderImpl {
|
|
|
237
290
|
return cached;
|
|
238
291
|
}
|
|
239
292
|
// if we don't find an entry for a grouping node, we load its instances by getting a query and applying
|
|
240
|
-
// a
|
|
241
|
-
let
|
|
293
|
+
// a search based on grouped instance keys
|
|
294
|
+
let targetInstanceKeys;
|
|
242
295
|
let parentNonGroupingNode;
|
|
243
296
|
if (parentNode) {
|
|
244
297
|
if (HierarchyNode_js_1.HierarchyNode.isGroupingNode(parentNode)) {
|
|
245
298
|
parentNonGroupingNode = parentNode.nonGroupingAncestor;
|
|
246
|
-
|
|
299
|
+
targetInstanceKeys = parentNode.groupedInstanceKeys;
|
|
247
300
|
}
|
|
248
301
|
else {
|
|
249
302
|
// not sure why type checker doesn't pick this up
|
|
@@ -254,7 +307,7 @@ class IModelHierarchyProviderImpl {
|
|
|
254
307
|
const nonGroupingNodeChildrenRequestProps = {
|
|
255
308
|
...restProps,
|
|
256
309
|
parentNode: parentNonGroupingNode,
|
|
257
|
-
...(
|
|
310
|
+
...(targetInstanceKeys ? { targetInstanceKeys } : undefined),
|
|
258
311
|
};
|
|
259
312
|
const value = { observable: this.createSourceNodesObservable(nonGroupingNodeChildrenRequestProps), processingStatus: "none" };
|
|
260
313
|
this._nodesCache?.set(nonGroupingNodeChildrenRequestProps, value);
|
|
@@ -318,11 +371,11 @@ class IModelHierarchyProviderImpl {
|
|
|
318
371
|
return (0, rxjs_1.from)(parentNode.groupedInstanceKeys);
|
|
319
372
|
}
|
|
320
373
|
(0, core_bentley_1.assert)(!parentNode || HierarchyNode_js_1.HierarchyNode.isGeneric(parentNode) || HierarchyNode_js_1.HierarchyNode.isInstancesNode(parentNode));
|
|
321
|
-
const hierarchyLevelDefinitions = this.createHierarchyLevelDefinitionsObservable({ parentNode, instanceFilter, requestContext });
|
|
322
374
|
// split the definitions based on whether they're for generic nodes or for instance nodes
|
|
323
|
-
const
|
|
375
|
+
const hierarchyLevelDefinitions = this.createHierarchyLevelDefinitionsObservable({ parentNode, instanceFilter, requestContext });
|
|
376
|
+
const [instanceDefs, genericDefs] = (0, Partition_js_1.partition)(hierarchyLevelDefinitions, (x) => IModelHierarchyDefinition_js_1.HierarchyNodesDefinition.isInstanceNodesQuery(x.hierarchyNodesDefinition));
|
|
324
377
|
// query instance keys and a flag whether they should be hidden
|
|
325
|
-
const instanceKeys = instanceDefs.pipe((0, rxjs_1.mergeMap)((def) => this.
|
|
378
|
+
const instanceKeys = instanceDefs.pipe((0, rxjs_1.mergeMap)(({ imodelAccess, hierarchyNodesDefinition: def }) => this.getQueryScheduler(imodelAccess.imodelKey).scheduleSubscription((0, rxjs_1.of)(def.query).pipe((0, rxjs_1.mergeMap)(async (query) => {
|
|
326
379
|
const ecsql = `
|
|
327
380
|
SELECT
|
|
328
381
|
${NodeSelectQueryFactory_js_1.NodeSelectClauseColumnNames.FullClassName},
|
|
@@ -332,12 +385,16 @@ class IModelHierarchyProviderImpl {
|
|
|
332
385
|
${query.ecsql}
|
|
333
386
|
)
|
|
334
387
|
`;
|
|
335
|
-
const reader =
|
|
388
|
+
const reader = imodelAccess.createQueryReader({ ...query, ecsql }, {
|
|
389
|
+
rowFormat: "Indexes",
|
|
390
|
+
limit: hierarchyLevelSizeLimit,
|
|
391
|
+
restartToken: `${this.#componentName}/${this.#componentId}/node-instance-keys/${core_bentley_1.Guid.createValue()}`,
|
|
392
|
+
});
|
|
336
393
|
return (0, rxjs_1.from)(reader).pipe((0, rxjs_1.map)((row) => ({
|
|
337
394
|
key: {
|
|
338
395
|
className: (0, presentation_shared_1.normalizeFullClassName)(row[0]),
|
|
339
396
|
id: row[1],
|
|
340
|
-
imodelKey:
|
|
397
|
+
imodelKey: imodelAccess.imodelKey,
|
|
341
398
|
},
|
|
342
399
|
hide: !!row[2],
|
|
343
400
|
})));
|
|
@@ -347,17 +404,17 @@ class IModelHierarchyProviderImpl {
|
|
|
347
404
|
// hidden items' handling:
|
|
348
405
|
// - if a generic node is hidden, we'll want to retrieve instance keys of its children, otherwise we don't care about it,
|
|
349
406
|
// - if an instance key is hidden, we want to create a merged node similar to what we do in `createHideNodesInHierarchyOperator`
|
|
350
|
-
const hiddenParentNodes = (0, rxjs_1.merge)(genericDefs.pipe((0, rxjs_1.filter)((
|
|
407
|
+
const hiddenParentNodes = (0, rxjs_1.merge)(genericDefs.pipe((0, rxjs_1.filter)(({ hierarchyNodesDefinition }) => !!hierarchyNodesDefinition.node.processingParams?.hideInHierarchy), (0, rxjs_1.map)(({ hierarchyNodesDefinition }) => ({
|
|
351
408
|
type: "generic",
|
|
352
|
-
id:
|
|
353
|
-
source: this
|
|
409
|
+
id: hierarchyNodesDefinition.node.key,
|
|
410
|
+
source: this.#sourceName,
|
|
354
411
|
}))), hiddenNodeInstanceKeys.pipe(
|
|
355
412
|
// first merge all keys by class
|
|
356
|
-
(0, ReduceToMergeMap_js_1.reduceToMergeMapList)(({ key }) => key.className, ({ key }) => key
|
|
413
|
+
(0, ReduceToMergeMap_js_1.reduceToMergeMapList)(({ key }) => key.className, ({ key }) => key),
|
|
357
414
|
// then, for each class, create an instance key
|
|
358
|
-
(0, rxjs_1.mergeMap)((mergedMap) => [...mergedMap.entries()].map(([className,
|
|
415
|
+
(0, rxjs_1.mergeMap)((mergedMap) => [...mergedMap.entries()].map(([className, keys]) => ({
|
|
359
416
|
type: "instances",
|
|
360
|
-
instanceKeys:
|
|
417
|
+
instanceKeys: keys.map(({ id, imodelKey }) => ({ className, id, imodelKey })),
|
|
361
418
|
}))))).pipe((0, rxjs_1.map)((key) => ({
|
|
362
419
|
key,
|
|
363
420
|
parentKeys: [],
|
|
@@ -394,14 +451,14 @@ class IModelHierarchyProviderImpl {
|
|
|
394
451
|
})));
|
|
395
452
|
}
|
|
396
453
|
}
|
|
397
|
-
function preProcessNodes(hierarchyFactory) {
|
|
398
|
-
return hierarchyFactory.preProcessNode ? processNodes(hierarchyFactory.preProcessNode) : rxjs_1.identity;
|
|
454
|
+
function preProcessNodes(hierarchyFactory, parentNode) {
|
|
455
|
+
return hierarchyFactory.preProcessNode ? processNodes(hierarchyFactory.preProcessNode, parentNode) : rxjs_1.identity;
|
|
399
456
|
}
|
|
400
|
-
function postProcessNodes(hierarchyFactory) {
|
|
401
|
-
return hierarchyFactory.postProcessNode ? processNodes(hierarchyFactory.postProcessNode) : rxjs_1.identity;
|
|
457
|
+
function postProcessNodes(hierarchyFactory, parentNode) {
|
|
458
|
+
return hierarchyFactory.postProcessNode ? processNodes(hierarchyFactory.postProcessNode, parentNode) : rxjs_1.identity;
|
|
402
459
|
}
|
|
403
|
-
function processNodes(processor) {
|
|
404
|
-
return (nodes) => nodes.pipe((0, rxjs_1.mergeMap)(processor));
|
|
460
|
+
function processNodes(processor, parentNode) {
|
|
461
|
+
return (nodes) => nodes.pipe((0, rxjs_1.mergeMap)((node) => processor({ node, parentNode })));
|
|
405
462
|
}
|
|
406
463
|
function applyLabelsFormatting(node, valueFormatter) {
|
|
407
464
|
return (0, rxjs_1.from)((0, presentation_shared_1.formatConcatenatedValue)({
|
|
@@ -418,20 +475,20 @@ function createParentNodeKeysList(parentNode) {
|
|
|
418
475
|
}
|
|
419
476
|
return [...parentNode.parentKeys, parentNode.key];
|
|
420
477
|
}
|
|
421
|
-
function
|
|
422
|
-
if (!
|
|
478
|
+
function createInstanceKeysFilteredQuery(query, targetInstanceKeys) {
|
|
479
|
+
if (!targetInstanceKeys || !targetInstanceKeys.length) {
|
|
423
480
|
return query;
|
|
424
481
|
}
|
|
425
482
|
const MAX_ALLOWED_BINDINGS = 1000;
|
|
426
|
-
if (
|
|
483
|
+
if (targetInstanceKeys.length < MAX_ALLOWED_BINDINGS) {
|
|
427
484
|
return {
|
|
428
485
|
...query,
|
|
429
486
|
ecsql: `
|
|
430
487
|
SELECT *
|
|
431
488
|
FROM (${query.ecsql}) q
|
|
432
|
-
WHERE q.ECInstanceId IN (${
|
|
489
|
+
WHERE q.ECInstanceId IN (${targetInstanceKeys.map(() => "?").join(",")})
|
|
433
490
|
`,
|
|
434
|
-
bindings: [...(query.bindings ?? []), ...
|
|
491
|
+
bindings: [...(query.bindings ?? []), ...targetInstanceKeys.map((k) => ({ type: "id", value: k.id }))],
|
|
435
492
|
};
|
|
436
493
|
}
|
|
437
494
|
/* c8 ignore start */
|
|
@@ -442,8 +499,78 @@ function filterQueryByInstanceKeys(query, filteredInstanceKeys) {
|
|
|
442
499
|
FROM (${query.ecsql}) q
|
|
443
500
|
WHERE InVirtualSet(?, q.ECInstanceId)
|
|
444
501
|
`,
|
|
445
|
-
bindings: [...(query.bindings ?? []), { type: "idset", value:
|
|
502
|
+
bindings: [...(query.bindings ?? []), { type: "idset", value: targetInstanceKeys.map((k) => k.id) }],
|
|
446
503
|
};
|
|
447
504
|
/* c8 ignore end */
|
|
448
505
|
}
|
|
506
|
+
function mergeNodes(source) {
|
|
507
|
+
return (0, rxjs_1.from)(source).pipe((0, rxjs_1.reduce)((acc, input) => {
|
|
508
|
+
for (let i = 0; i < acc.length; ++i) {
|
|
509
|
+
if (input.imodelAccess === acc[i].imodelAccess) {
|
|
510
|
+
// don't attempt to merge nodes if they come from the same provider
|
|
511
|
+
continue;
|
|
512
|
+
}
|
|
513
|
+
// the first argument for `tryMergeNodes` acts as the primary data source, so we have to make sure we pass
|
|
514
|
+
// the node with higher `imodelAccessIndex` first
|
|
515
|
+
const candidates = input.imodelAccessIndex > acc[i].imodelAccessIndex
|
|
516
|
+
? { imodelAccess: input.imodelAccess, imodelAccessIndex: input.imodelAccessIndex, primary: input.node, secondary: acc[i].node }
|
|
517
|
+
: { imodelAccess: acc[i].imodelAccess, imodelAccessIndex: acc[i].imodelAccessIndex, primary: acc[i].node, secondary: input.node };
|
|
518
|
+
const merged = tryMergeNodes(candidates.primary, candidates.secondary);
|
|
519
|
+
if (merged) {
|
|
520
|
+
acc[i] = { node: merged, imodelAccess: candidates.imodelAccess, imodelAccessIndex: candidates.imodelAccessIndex };
|
|
521
|
+
return acc;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
acc.push(input);
|
|
525
|
+
return acc;
|
|
526
|
+
}, new Array()), (0, rxjs_1.mergeAll)());
|
|
527
|
+
}
|
|
528
|
+
function mergeSearchProps(primary, secondary) {
|
|
529
|
+
if (!primary || !secondary) {
|
|
530
|
+
return primary ?? secondary;
|
|
531
|
+
}
|
|
532
|
+
const hasSearchTargetAncestor = primary.hasSearchTargetAncestor || secondary.hasSearchTargetAncestor;
|
|
533
|
+
const childrenTargetPaths = [...(primary.childrenTargetPaths ?? []), ...(secondary.childrenTargetPaths ?? [])];
|
|
534
|
+
return {
|
|
535
|
+
...(hasSearchTargetAncestor ? { hasSearchTargetAncestor } : undefined),
|
|
536
|
+
...(childrenTargetPaths.length ? { childrenTargetPaths } : undefined),
|
|
537
|
+
...(primary.isSearchTarget || secondary.isSearchTarget
|
|
538
|
+
? {
|
|
539
|
+
isSearchTarget: true,
|
|
540
|
+
searchTargetOptions: HierarchySearch_js_1.HierarchySearchPath.mergeOptions(primary.isSearchTarget ? primary.searchTargetOptions : undefined, secondary.isSearchTarget ? secondary.searchTargetOptions : undefined),
|
|
541
|
+
}
|
|
542
|
+
: {
|
|
543
|
+
isSearchTarget: false,
|
|
544
|
+
}),
|
|
545
|
+
};
|
|
546
|
+
}
|
|
547
|
+
function tryMergeInstanceNodes(primary, secondary) {
|
|
548
|
+
if (HierarchyNode_js_1.HierarchyNode.isInstancesNode(primary) &&
|
|
549
|
+
HierarchyNode_js_1.HierarchyNode.isInstancesNode(secondary) &&
|
|
550
|
+
primary.key.instanceKeys.some((lhsKey) => secondary.key.instanceKeys.some((rhsKey) => presentation_shared_1.InstanceKey.equals(lhsKey, rhsKey)))) {
|
|
551
|
+
const searchProps = mergeSearchProps(primary.search, secondary.search);
|
|
552
|
+
return {
|
|
553
|
+
...primary,
|
|
554
|
+
key: {
|
|
555
|
+
type: "instances",
|
|
556
|
+
instanceKeys: primary.key.instanceKeys.concat(secondary.key.instanceKeys),
|
|
557
|
+
},
|
|
558
|
+
...(searchProps ? { search: searchProps } : undefined),
|
|
559
|
+
};
|
|
560
|
+
}
|
|
561
|
+
return undefined;
|
|
562
|
+
}
|
|
563
|
+
function tryMergeGenericNodes(primary, secondary) {
|
|
564
|
+
if (HierarchyNode_js_1.HierarchyNode.isGeneric(primary) && HierarchyNode_js_1.HierarchyNode.isGeneric(secondary) && primary.key.id === secondary.key.id) {
|
|
565
|
+
const searchProps = mergeSearchProps(primary.search, secondary.search);
|
|
566
|
+
return {
|
|
567
|
+
...primary,
|
|
568
|
+
...(searchProps ? { search: searchProps } : undefined),
|
|
569
|
+
};
|
|
570
|
+
}
|
|
571
|
+
return undefined;
|
|
572
|
+
}
|
|
573
|
+
function tryMergeNodes(primary, secondary) {
|
|
574
|
+
return tryMergeInstanceNodes(primary, secondary) ?? tryMergeGenericNodes(primary, secondary) ?? undefined;
|
|
575
|
+
}
|
|
449
576
|
//# sourceMappingURL=IModelHierarchyProvider.js.map
|