@itwin/presentation-hierarchies 2.0.0-alpha.14 → 2.0.0-alpha.16
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 +142 -0
- package/README.md +12 -22
- package/lib/cjs/hierarchies/HierarchyMerge.d.ts +1 -1
- package/lib/cjs/hierarchies/HierarchyMerge.d.ts.map +1 -1
- package/lib/cjs/hierarchies/HierarchyMerge.js +1 -1
- package/lib/cjs/hierarchies/HierarchyMerge.js.map +1 -1
- package/lib/cjs/hierarchies/HierarchyNode.d.ts.map +1 -1
- package/lib/cjs/hierarchies/HierarchyNode.js.map +1 -1
- package/lib/cjs/hierarchies/HierarchyNodeKey.d.ts.map +1 -1
- package/lib/cjs/hierarchies/HierarchyNodeKey.js.map +1 -1
- package/lib/cjs/hierarchies/HierarchyProvider.d.ts.map +1 -1
- package/lib/cjs/hierarchies/HierarchyProvider.js +7 -3
- package/lib/cjs/hierarchies/HierarchyProvider.js.map +1 -1
- package/lib/cjs/hierarchies/HierarchySearch.d.ts.map +1 -1
- package/lib/cjs/hierarchies/HierarchySearch.js +19 -12
- package/lib/cjs/hierarchies/HierarchySearch.js.map +1 -1
- package/lib/cjs/hierarchies/Logging.js +1 -1
- package/lib/cjs/hierarchies/Logging.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/HierarchyCache.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/HierarchyCache.js +1 -4
- package/lib/cjs/hierarchies/imodel/HierarchyCache.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.d.ts +4 -2
- 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.map +1 -1
- package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.d.ts +20 -2
- package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.js +157 -85
- package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.js +12 -9
- package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.d.ts +4 -3
- package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.js +44 -68
- package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.js +2 -1
- package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/SearchHierarchyDefinition.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/SearchHierarchyDefinition.js +11 -4
- package/lib/cjs/hierarchies/imodel/SearchHierarchyDefinition.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/TreeNodesReader.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/TreeNodesReader.js +3 -5
- package/lib/cjs/hierarchies/imodel/TreeNodesReader.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/Utils.d.ts +1 -0
- package/lib/cjs/hierarchies/imodel/Utils.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/Utils.js +21 -7
- package/lib/cjs/hierarchies/imodel/Utils.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.js +10 -4
- package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/Grouping.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/Grouping.js +32 -18
- package/lib/cjs/hierarchies/imodel/operators/Grouping.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.js +31 -9
- package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.js +30 -14
- package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.js +4 -6
- package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.js +4 -9
- package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.js +1 -5
- package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.js +2 -10
- package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.js +24 -28
- package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.js +3 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.js.map +1 -1
- package/lib/cjs/hierarchies/internal/Common.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/Common.js +2 -2
- package/lib/cjs/hierarchies/internal/Common.js.map +1 -1
- package/lib/cjs/hierarchies/internal/EachValueFrom.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/EachValueFrom.js +0 -2
- package/lib/cjs/hierarchies/internal/EachValueFrom.js.map +1 -1
- package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.js +3 -1
- package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.js.map +1 -1
- package/lib/cjs/hierarchies/internal/SubscriptionScheduler.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/SubscriptionScheduler.js +1 -4
- package/lib/cjs/hierarchies/internal/SubscriptionScheduler.js.map +1 -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.map +1 -1
- package/lib/cjs/hierarchies/internal/operators/ReleaseMainThread.d.ts.map +1 -1
- package/lib/cjs/presentation-hierarchies.d.ts +2 -4
- package/lib/cjs/presentation-hierarchies.d.ts.map +1 -1
- package/lib/cjs/presentation-hierarchies.js +1 -4
- package/lib/cjs/presentation-hierarchies.js.map +1 -1
- package/lib/esm/hierarchies/HierarchyMerge.d.ts +1 -1
- package/lib/esm/hierarchies/HierarchyMerge.d.ts.map +1 -1
- package/lib/esm/hierarchies/HierarchyMerge.js +1 -1
- package/lib/esm/hierarchies/HierarchyMerge.js.map +1 -1
- package/lib/esm/hierarchies/HierarchyNode.d.ts.map +1 -1
- package/lib/esm/hierarchies/HierarchyNode.js.map +1 -1
- package/lib/esm/hierarchies/HierarchyNodeKey.d.ts.map +1 -1
- package/lib/esm/hierarchies/HierarchyNodeKey.js.map +1 -1
- package/lib/esm/hierarchies/HierarchyProvider.d.ts.map +1 -1
- package/lib/esm/hierarchies/HierarchyProvider.js +7 -3
- package/lib/esm/hierarchies/HierarchyProvider.js.map +1 -1
- package/lib/esm/hierarchies/HierarchySearch.d.ts.map +1 -1
- package/lib/esm/hierarchies/HierarchySearch.js +19 -12
- package/lib/esm/hierarchies/HierarchySearch.js.map +1 -1
- package/lib/esm/hierarchies/Logging.js +1 -1
- package/lib/esm/hierarchies/Logging.js.map +1 -1
- package/lib/esm/hierarchies/imodel/HierarchyCache.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/HierarchyCache.js +1 -4
- package/lib/esm/hierarchies/imodel/HierarchyCache.js.map +1 -1
- package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.d.ts +4 -2
- 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.map +1 -1
- package/lib/esm/hierarchies/imodel/IModelHierarchyNode.js.map +1 -1
- package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.d.ts +20 -2
- package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.js +160 -88
- package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.js.map +1 -1
- package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.js +13 -10
- package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.js.map +1 -1
- package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.d.ts +4 -3
- package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.js +45 -69
- package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.js.map +1 -1
- package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.js +2 -1
- package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.js.map +1 -1
- package/lib/esm/hierarchies/imodel/SearchHierarchyDefinition.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/SearchHierarchyDefinition.js +11 -4
- package/lib/esm/hierarchies/imodel/SearchHierarchyDefinition.js.map +1 -1
- package/lib/esm/hierarchies/imodel/TreeNodesReader.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/TreeNodesReader.js +3 -5
- package/lib/esm/hierarchies/imodel/TreeNodesReader.js.map +1 -1
- package/lib/esm/hierarchies/imodel/Utils.d.ts +1 -0
- package/lib/esm/hierarchies/imodel/Utils.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/Utils.js +20 -7
- package/lib/esm/hierarchies/imodel/Utils.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/DetermineChildren.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/DetermineChildren.js +11 -5
- package/lib/esm/hierarchies/imodel/operators/DetermineChildren.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/Grouping.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/Grouping.js +33 -19
- package/lib/esm/hierarchies/imodel/operators/Grouping.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.js +32 -10
- package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.js +31 -15
- package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.js +5 -7
- package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.js +5 -10
- package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.js +1 -5
- package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.js +2 -10
- package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.js +24 -28
- package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/Shared.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/Shared.js +3 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/Shared.js.map +1 -1
- package/lib/esm/hierarchies/internal/Common.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/Common.js +2 -2
- package/lib/esm/hierarchies/internal/Common.js.map +1 -1
- package/lib/esm/hierarchies/internal/EachValueFrom.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/EachValueFrom.js +0 -2
- package/lib/esm/hierarchies/internal/EachValueFrom.js.map +1 -1
- package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.js +3 -1
- package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.js.map +1 -1
- package/lib/esm/hierarchies/internal/SubscriptionScheduler.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/SubscriptionScheduler.js +1 -4
- package/lib/esm/hierarchies/internal/SubscriptionScheduler.js.map +1 -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.map +1 -1
- package/lib/esm/hierarchies/internal/operators/ReleaseMainThread.d.ts.map +1 -1
- package/lib/esm/presentation-hierarchies.d.ts +2 -4
- package/lib/esm/presentation-hierarchies.d.ts.map +1 -1
- package/lib/esm/presentation-hierarchies.js +2 -3
- package/lib/esm/presentation-hierarchies.js.map +1 -1
- package/package.json +17 -25
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelHierarchyProvider.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/IModelHierarchyProvider.ts"],"names":[],"mappings":"AAKA,OAAO,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"IModelHierarchyProvider.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/IModelHierarchyProvider.ts"],"names":[],"mappings":"AAKA,OAAO,gCAAgC,CAAC;AAkCxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AA6B5D,OAAO,KAAK,EAEV,yBAAyB,EACzB,gBAAgB,EAEhB,KAAK,EAEL,iCAAiC,EACjC,wBAAwB,EACzB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAA0B,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEzF,OAAO,KAAK,EAGV,mBAAmB,EAEpB,MAAM,gCAAgC,CAAC;AAOxC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAUlF;;;GAGG;AACH,UAAU,uCAAuC;IAC/C;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED,cAAc;AACd,KAAK,YAAY,GAAG,gBAAgB,GAAG,0BAA0B,GAAG,yBAAyB,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtH;;;GAGG;AACH,UAAU,4BAA4B;IACpC;;;;;;OAMG;IACH,YAAY,EAAE,YAAY,CAAC;IAE3B;;;OAGG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;IAElC;;;OAGG;IACH,mBAAmB,EAAE,mBAAmB,CAAC;IAEzC,qGAAqG;IACrG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,OAAO,CAAC,uCAAuC,CAAC,CAAC;IAEpE;;;;OAIG;IACH,SAAS,CAAC,EAAE,wBAAwB,CAAC;IAErC;;;;;OAKG;IACH,MAAM,CAAC,EAAE;QACP,iFAAiF;QACjF,KAAK,EAAE,mBAAmB,EAAE,CAAC;KAC9B,CAAC;IAEF;;;;;;;OAOG;IACH,gCAAgC,CAAC,EAAE,iCAAiC,CAAC;CACtE;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,4BAA4B,GAAG,iBAAiB,GAAG,UAAU,CAMjH;AAED;;;GAGG;AACH,UAAU,kCAAmC,SAAQ,IAAI,CACvD,4BAA4B,EAC5B,cAAc,GAAG,eAAe,GAAG,kCAAkC,CACtE;IACC;;;;;OAKG;IACH,OAAO,EAAE,KAAK,CAAC;QACb;;;;;;WAMG;QACH,YAAY,EAAE,YAAY,CAAC;QAE3B;;;WAGG;QACH,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QAElC;;;;;;;WAOG;QACH,gCAAgC,CAAC,EAAE,iCAAiC,CAAC;KACtE,CAAC,CAAC;CACJ;AAED;;;;;;;GAOG;AACH,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,kCAAkC,GACxC,iBAAiB,GAAG,UAAU,CAEhC"}
|
|
@@ -32,6 +32,7 @@ const HideIfNoChildren_js_1 = require("./operators/HideIfNoChildren.js");
|
|
|
32
32
|
const HideNodesInHierarchy_js_1 = require("./operators/HideNodesInHierarchy.js");
|
|
33
33
|
const SearchHierarchyDefinition_js_1 = require("./SearchHierarchyDefinition.js");
|
|
34
34
|
const TreeNodesReader_js_1 = require("./TreeNodesReader.js");
|
|
35
|
+
const Utils_js_1 = require("./Utils.js");
|
|
35
36
|
const LOGGING_NAMESPACE = `${Common_js_1.LOGGING_NAMESPACE}.IModelHierarchyProvider`;
|
|
36
37
|
const LOGGING_NAMESPACE_INTERNAL = `${Common_js_1.LOGGING_NAMESPACE_INTERNAL}.IModelHierarchyProvider`;
|
|
37
38
|
const LOGGING_NAMESPACE_PERFORMANCE = `${Common_js_1.LOGGING_NAMESPACE_PERFORMANCE}.IModelHierarchyProvider`;
|
|
@@ -44,8 +45,11 @@ const DEFAULT_QUERY_CACHE_SIZE = 1;
|
|
|
44
45
|
* @public
|
|
45
46
|
*/
|
|
46
47
|
function createIModelHierarchyProvider(props) {
|
|
47
|
-
const { imodelAccess, imodelChanged, ...restProps } = props;
|
|
48
|
-
return createMergedIModelHierarchyProvider({
|
|
48
|
+
const { imodelAccess, imodelChanged, instanceLabelSelectClauseFactory, ...restProps } = props;
|
|
49
|
+
return createMergedIModelHierarchyProvider({
|
|
50
|
+
...restProps,
|
|
51
|
+
imodels: [{ imodelAccess, imodelChanged, instanceLabelSelectClauseFactory }],
|
|
52
|
+
});
|
|
49
53
|
}
|
|
50
54
|
/**
|
|
51
55
|
* Creates an instance of `HierarchyProvider` that creates a hierarchy based on multiple version of **the same** iModel
|
|
@@ -79,9 +83,14 @@ class IModelHierarchyProviderImpl {
|
|
|
79
83
|
}
|
|
80
84
|
this.#componentId = core_bentley_1.Guid.createValue();
|
|
81
85
|
this.#componentName = "IModelHierarchyProviderImpl";
|
|
82
|
-
/* c8 ignore next */
|
|
83
86
|
this.#sourceName = props.sourceName ?? `${this.#componentName}:${this.#componentId}`;
|
|
84
|
-
this._imodels = props.imodels
|
|
87
|
+
this._imodels = props.imodels.map(({ imodelAccess, imodelChanged, instanceLabelSelectClauseFactory }) => {
|
|
88
|
+
if (!instanceLabelSelectClauseFactory) {
|
|
89
|
+
instanceLabelSelectClauseFactory = (0, presentation_shared_1.createIModelInstanceLabelSelectClauseFactory)({ imodelAccess });
|
|
90
|
+
}
|
|
91
|
+
const nodeSelectClauseFactory = (0, NodeSelectQueryFactory_js_1.createNodesQueryClauseFactory)({ imodelAccess, instanceLabelSelectClauseFactory });
|
|
92
|
+
return { imodelAccess, imodelChanged, nodeSelectClauseFactory };
|
|
93
|
+
});
|
|
85
94
|
this._hierarchyChanged = new core_bentley_1.BeEvent();
|
|
86
95
|
this._activeHierarchyDefinition = this._sourceHierarchyDefinition = (0, RxjsHierarchyDefinition_js_1.getRxjsHierarchyDefinition)(props.hierarchyDefinition);
|
|
87
96
|
this._valuesFormatter = props.formatter ?? (0, presentation_shared_1.createDefaultValueFormatter)();
|
|
@@ -114,7 +123,7 @@ class IModelHierarchyProviderImpl {
|
|
|
114
123
|
this._dispose.next();
|
|
115
124
|
this._unsubscribe?.();
|
|
116
125
|
}
|
|
117
|
-
/*
|
|
126
|
+
/* v8 ignore next -- @preserve */
|
|
118
127
|
dispose() {
|
|
119
128
|
this[Symbol.dispose]();
|
|
120
129
|
}
|
|
@@ -133,9 +142,10 @@ class IModelHierarchyProviderImpl {
|
|
|
133
142
|
return this._imodels[this._imodels.length - 1].imodelAccess;
|
|
134
143
|
}
|
|
135
144
|
invalidateHierarchyCache(reason) {
|
|
145
|
+
/* v8 ignore next -- @preserve */
|
|
136
146
|
(0, LoggingUtils_js_1.doLog)({
|
|
137
147
|
category: `${LOGGING_NAMESPACE}.Events`,
|
|
138
|
-
message:
|
|
148
|
+
message: () => (reason ? `${reason}: clear hierarchy cache` : `Clear hierarchy cache`),
|
|
139
149
|
});
|
|
140
150
|
this._nodesCache?.clear();
|
|
141
151
|
}
|
|
@@ -171,13 +181,17 @@ class IModelHierarchyProviderImpl {
|
|
|
171
181
|
}
|
|
172
182
|
createHierarchyLevelDefinitionsObservable(props) {
|
|
173
183
|
const { requestContext, ...defineHierarchyLevelProps } = props;
|
|
184
|
+
/* v8 ignore next -- @preserve */
|
|
174
185
|
(0, LoggingUtils_js_1.doLog)({
|
|
175
186
|
category: LOGGING_NAMESPACE_PERFORMANCE,
|
|
176
|
-
message:
|
|
187
|
+
message: () => `[${requestContext.requestId}] Requesting hierarchy level definitions for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
177
188
|
});
|
|
178
|
-
return (0, rxjs_1.from)(this._imodels).pipe((0, rxjs_1.mergeMap)(({ imodelAccess }, imodelAccessIndex) => {
|
|
189
|
+
return (0, rxjs_1.from)(this._imodels).pipe((0, rxjs_1.mergeMap)(({ imodelAccess, nodeSelectClauseFactory }, imodelAccessIndex) => {
|
|
179
190
|
let parentNode = props.parentNode;
|
|
180
|
-
if (parentNode &&
|
|
191
|
+
if (parentNode &&
|
|
192
|
+
HierarchyNode_js_1.HierarchyNode.isGeneric(parentNode) &&
|
|
193
|
+
parentNode.key.source &&
|
|
194
|
+
parentNode.key.source !== this.#sourceName) {
|
|
181
195
|
return rxjs_1.EMPTY;
|
|
182
196
|
}
|
|
183
197
|
if (parentNode && HierarchyNode_js_1.HierarchyNode.isInstancesNode(parentNode)) {
|
|
@@ -193,38 +207,67 @@ class IModelHierarchyProviderImpl {
|
|
|
193
207
|
return rxjs_1.EMPTY;
|
|
194
208
|
}
|
|
195
209
|
}
|
|
196
|
-
return this._activeHierarchyDefinition
|
|
210
|
+
return this._activeHierarchyDefinition
|
|
211
|
+
.defineHierarchyLevel({
|
|
212
|
+
...defineHierarchyLevelProps,
|
|
213
|
+
createSelectClause: async (selectClauseProps) => nodeSelectClauseFactory.createSelectClause(selectClauseProps),
|
|
214
|
+
/* v8 ignore start */
|
|
215
|
+
createFilterClauses: async (filterClausesProps) => nodeSelectClauseFactory.createFilterClauses(filterClausesProps),
|
|
216
|
+
/* v8 ignore stop */
|
|
217
|
+
parentNode,
|
|
218
|
+
imodelAccess,
|
|
219
|
+
})
|
|
220
|
+
.pipe((0, rxjs_1.mergeAll)(), (0, rxjs_1.map)(
|
|
197
221
|
/* 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
222
|
(hierarchyNodesDefinition) => ({ imodelAccess, imodelAccessIndex, hierarchyNodesDefinition })));
|
|
199
|
-
}), (0, rxjs_1.finalize)(() =>
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
223
|
+
}), (0, rxjs_1.finalize)(() => {
|
|
224
|
+
/* v8 ignore next -- @preserve */
|
|
225
|
+
(0, LoggingUtils_js_1.doLog)({
|
|
226
|
+
category: LOGGING_NAMESPACE_PERFORMANCE,
|
|
227
|
+
message: () => `[${requestContext.requestId}] Received all hierarchy level definitions for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
228
|
+
});
|
|
229
|
+
}));
|
|
203
230
|
}
|
|
204
231
|
createSourceNodesObservable(props) {
|
|
205
|
-
|
|
206
|
-
return this.createHierarchyLevelDefinitionsObservable(props).pipe((0, rxjs_1.mergeMap)(({ imodelAccess, imodelAccessIndex, hierarchyNodesDefinition: def }) => (0, rxjs_1.defer)(() => {
|
|
232
|
+
const createSourceNodesFromDefinition = (imodelAccess, def) => {
|
|
207
233
|
if (IModelHierarchyDefinition_js_1.HierarchyNodesDefinition.isGenericNode(def)) {
|
|
208
|
-
return (0, rxjs_1.of)({
|
|
209
|
-
...def.node,
|
|
210
|
-
key: { type: "generic", id: def.node.key, source: this.#sourceName },
|
|
211
|
-
});
|
|
234
|
+
return (0, rxjs_1.of)({ ...def.node, key: { type: "generic", id: def.node.key, source: this.#sourceName } });
|
|
212
235
|
}
|
|
213
|
-
|
|
236
|
+
const query = createInstanceKeysFilteredQuery(def.query, props.targetInstanceKeys);
|
|
237
|
+
return this.getQueryScheduler(imodelAccess.imodelKey).scheduleSubscription((0, TreeNodesReader_js_1.readNodes)({
|
|
214
238
|
queryExecutor: imodelAccess,
|
|
215
239
|
query,
|
|
216
240
|
limit: props.hierarchyLevelSizeLimit,
|
|
217
241
|
parser: this._activeHierarchyDefinition.parseNode
|
|
218
|
-
? ({ row }) => this._activeHierarchyDefinition.parseNode({
|
|
242
|
+
? ({ row }) => this._activeHierarchyDefinition.parseNode({
|
|
243
|
+
row,
|
|
244
|
+
parentNode: props.parentNode,
|
|
245
|
+
imodelKey: imodelAccess.imodelKey,
|
|
246
|
+
})
|
|
219
247
|
: undefined,
|
|
220
|
-
})
|
|
248
|
+
}).pipe((0, rxjs_1.map)((node) => ({
|
|
221
249
|
...node,
|
|
222
|
-
key: {
|
|
250
|
+
key: {
|
|
251
|
+
...node.key,
|
|
252
|
+
instanceKeys: node.key.instanceKeys.map((key) => ({ ...key, imodelKey: imodelAccess.imodelKey })),
|
|
253
|
+
},
|
|
223
254
|
}))));
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
255
|
+
};
|
|
256
|
+
const definitions = this.createHierarchyLevelDefinitionsObservable(props);
|
|
257
|
+
let sourceNodes;
|
|
258
|
+
if (this._imodels.length === 1) {
|
|
259
|
+
sourceNodes = definitions.pipe((0, rxjs_1.mergeMap)(({ imodelAccess, hierarchyNodesDefinition: def }) => createSourceNodesFromDefinition(imodelAccess, def)));
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
sourceNodes = definitions.pipe((0, rxjs_1.mergeMap)(({ imodelAccess, imodelAccessIndex, hierarchyNodesDefinition: def }) => createSourceNodesFromDefinition(imodelAccess, def).pipe((0, rxjs_1.map)((node) => ({ imodelAccess, imodelAccessIndex, node })))), mergeNodes, (0, rxjs_1.map)(({ node }) => node));
|
|
263
|
+
}
|
|
264
|
+
return sourceNodes.pipe((0, rxjs_1.finalize)(() => {
|
|
265
|
+
/* v8 ignore next -- @preserve */
|
|
266
|
+
(0, LoggingUtils_js_1.doLog)({
|
|
267
|
+
category: LOGGING_NAMESPACE_PERFORMANCE,
|
|
268
|
+
message: () => `[${props.requestContext.requestId}] Read all child nodes ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
269
|
+
});
|
|
270
|
+
}), (0, ShareReplayWithErrors_js_1.shareReplayWithErrors)());
|
|
228
271
|
}
|
|
229
272
|
createPreProcessedNodesObservable(queryNodesObservable, props) {
|
|
230
273
|
return queryNodesObservable.pipe(
|
|
@@ -240,16 +283,22 @@ class IModelHierarchyProviderImpl {
|
|
|
240
283
|
// process hiding
|
|
241
284
|
(0, HideIfNoChildren_js_1.createHideIfNoChildrenOperator)((n) => this.getChildNodesObservables({ parentNode: n, requestContext: props.requestContext }).hasNodes), (0, HideNodesInHierarchy_js_1.createHideNodesInHierarchyOperator)(
|
|
242
285
|
// note: for child nodes created because of hidden parent, we want to use parent's request props (instance filter, limit)
|
|
243
|
-
(n) => this.getChildNodesObservables({ ...props, parentNode: n }).processedNodes, false), (0, rxjs_1.finalize)(() =>
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
286
|
+
(n) => this.getChildNodesObservables({ ...props, parentNode: n }).processedNodes, false), (0, rxjs_1.finalize)(() => {
|
|
287
|
+
/* v8 ignore next -- @preserve */
|
|
288
|
+
(0, LoggingUtils_js_1.doLog)({
|
|
289
|
+
category: LOGGING_NAMESPACE_PERFORMANCE,
|
|
290
|
+
message: () => `[${props.requestContext.requestId}] Finished pre-processing child nodes for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
291
|
+
});
|
|
292
|
+
}));
|
|
247
293
|
}
|
|
248
294
|
createProcessedNodesObservable(preprocessedNodesObservable, props) {
|
|
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)(() =>
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
295
|
+
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)(() => {
|
|
296
|
+
/* v8 ignore next -- @preserve */
|
|
297
|
+
(0, LoggingUtils_js_1.doLog)({
|
|
298
|
+
category: LOGGING_NAMESPACE_PERFORMANCE,
|
|
299
|
+
message: () => `[${props.requestContext.requestId}] Finished grouping child nodes for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
300
|
+
});
|
|
301
|
+
}));
|
|
253
302
|
}
|
|
254
303
|
createFinalizedNodesObservable(processedNodesObservable, props) {
|
|
255
304
|
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) => {
|
|
@@ -257,35 +306,44 @@ class IModelHierarchyProviderImpl {
|
|
|
257
306
|
delete n.processingParams;
|
|
258
307
|
}
|
|
259
308
|
return { ...n, children: (0, Common_js_1.hasChildren)(n) };
|
|
260
|
-
}), (0, rxjs_1.takeUntil)(this._dispose), (0, rxjs_1.finalize)(() =>
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
309
|
+
}), (0, rxjs_1.takeUntil)(this._dispose), (0, rxjs_1.finalize)(() => {
|
|
310
|
+
/* v8 ignore next -- @preserve */
|
|
311
|
+
(0, LoggingUtils_js_1.doLog)({
|
|
312
|
+
category: LOGGING_NAMESPACE_PERFORMANCE,
|
|
313
|
+
message: () => `[${props.requestContext.requestId}] Finished finalizing child nodes for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
314
|
+
});
|
|
315
|
+
}));
|
|
264
316
|
}
|
|
265
317
|
createHasNodesObservable(preprocessedNodesObservable, possiblyKnownChildrenObservable, props) {
|
|
266
318
|
const loggingCategory = `${LOGGING_NAMESPACE_INTERNAL}.HasNodes`;
|
|
267
|
-
return (0, rxjs_1.concat)((possiblyKnownChildrenObservable ?? rxjs_1.EMPTY).pipe((0, rxjs_1.filter)((n) => (0, Common_js_1.hasChildren)(n))), preprocessedNodesObservable).pipe(
|
|
319
|
+
return (0, rxjs_1.concat)((possiblyKnownChildrenObservable ?? rxjs_1.EMPTY).pipe((0, rxjs_1.filter)((n) => (0, Common_js_1.hasChildren)(n))), preprocessedNodesObservable).pipe(
|
|
320
|
+
/* v8 ignore next -- @preserve */
|
|
321
|
+
(0, LoggingUtils_js_1.log)({
|
|
268
322
|
category: loggingCategory,
|
|
269
|
-
message:
|
|
323
|
+
message: (n) => `[${props.requestContext.requestId}] Node before mapping to 'true': ${(0, Common_js_1.createNodeIdentifierForLogging)(n)}`,
|
|
270
324
|
}), (0, rxjs_1.take)(1), (0, rxjs_1.map)(() => true), (0, rxjs_1.defaultIfEmpty)(false), (0, rxjs_1.catchError)((e) => {
|
|
325
|
+
/* v8 ignore next -- @preserve */
|
|
271
326
|
(0, LoggingUtils_js_1.doLog)({
|
|
272
327
|
category: loggingCategory,
|
|
273
|
-
message:
|
|
328
|
+
message: () => `[${props.requestContext.requestId}] Error while determining children: ${e.message}`,
|
|
274
329
|
});
|
|
275
330
|
if (e instanceof HierarchyErrors_js_1.RowsLimitExceededError) {
|
|
276
331
|
return (0, rxjs_1.of)(true);
|
|
277
332
|
}
|
|
278
333
|
throw e;
|
|
279
|
-
}),
|
|
334
|
+
}),
|
|
335
|
+
/* v8 ignore next -- @preserve */
|
|
336
|
+
(0, LoggingUtils_js_1.log)({ category: loggingCategory, message: (r) => `[${props.requestContext.requestId}] Result: ${r}` }));
|
|
280
337
|
}
|
|
281
338
|
getCachedObservableEntry(props) {
|
|
282
339
|
const loggingCategory = `${LOGGING_NAMESPACE}.QueryResultsCache`;
|
|
283
340
|
const { parentNode, ...restProps } = props;
|
|
284
341
|
const cached = props.ignoreCache || !this._nodesCache ? undefined : this._nodesCache.get(props);
|
|
285
342
|
if (cached) {
|
|
343
|
+
/* v8 ignore next -- @preserve */
|
|
286
344
|
(0, LoggingUtils_js_1.doLog)({
|
|
287
345
|
category: loggingCategory,
|
|
288
|
-
message:
|
|
346
|
+
message: () => `[${props.requestContext.requestId}] Found query nodes observable for ${(0, Common_js_1.createNodeIdentifierForLogging)(parentNode)}`,
|
|
289
347
|
});
|
|
290
348
|
return cached;
|
|
291
349
|
}
|
|
@@ -309,11 +367,15 @@ class IModelHierarchyProviderImpl {
|
|
|
309
367
|
parentNode: parentNonGroupingNode,
|
|
310
368
|
...(targetInstanceKeys ? { targetInstanceKeys } : undefined),
|
|
311
369
|
};
|
|
312
|
-
const value = {
|
|
370
|
+
const value = {
|
|
371
|
+
observable: this.createSourceNodesObservable(nonGroupingNodeChildrenRequestProps),
|
|
372
|
+
processingStatus: "none",
|
|
373
|
+
};
|
|
313
374
|
this._nodesCache?.set(nonGroupingNodeChildrenRequestProps, value);
|
|
375
|
+
/* v8 ignore next -- @preserve */
|
|
314
376
|
(0, LoggingUtils_js_1.doLog)({
|
|
315
377
|
category: loggingCategory,
|
|
316
|
-
message:
|
|
378
|
+
message: () => `[${props.requestContext.requestId}] Saved query nodes observable for ${(0, Common_js_1.createNodeIdentifierForLogging)(parentNode)}`,
|
|
317
379
|
});
|
|
318
380
|
return value;
|
|
319
381
|
}
|
|
@@ -348,18 +410,19 @@ class IModelHierarchyProviderImpl {
|
|
|
348
410
|
const timer = new core_bentley_1.StopWatch(undefined, true);
|
|
349
411
|
let error;
|
|
350
412
|
let nodesCount = 0;
|
|
413
|
+
/* v8 ignore next -- @preserve */
|
|
351
414
|
(0, LoggingUtils_js_1.doLog)({
|
|
352
415
|
category: loggingCategory,
|
|
353
|
-
message:
|
|
416
|
+
message: () => `[${requestContext.requestId}] Requesting child nodes for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
354
417
|
});
|
|
355
418
|
return (0, EachValueFrom_js_1.eachValueFrom)(this.getChildNodesObservables({ ...props, requestContext }).finalizedNodes.pipe((0, rxjs_1.tap)(() => ++nodesCount), (0, rxjs_1.catchError)((e) => {
|
|
356
419
|
error = e;
|
|
357
420
|
throw e;
|
|
358
421
|
}), (0, rxjs_1.finalize)(() => {
|
|
422
|
+
/* v8 ignore next -- @preserve */
|
|
359
423
|
(0, LoggingUtils_js_1.doLog)({
|
|
360
424
|
category: loggingCategory,
|
|
361
|
-
message:
|
|
362
|
-
/* c8 ignore next 3 */ error
|
|
425
|
+
message: () => error
|
|
363
426
|
? `[${requestContext.requestId}] Error creating child nodes for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}: ${error instanceof Error ? error.message : error.toString()}`
|
|
364
427
|
: `[${requestContext.requestId}] Returned ${nodesCount} child nodes for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)} in ${timer.currentSeconds.toFixed(2)} s.`,
|
|
365
428
|
});
|
|
@@ -372,7 +435,11 @@ class IModelHierarchyProviderImpl {
|
|
|
372
435
|
}
|
|
373
436
|
(0, core_bentley_1.assert)(!parentNode || HierarchyNode_js_1.HierarchyNode.isGeneric(parentNode) || HierarchyNode_js_1.HierarchyNode.isInstancesNode(parentNode));
|
|
374
437
|
// split the definitions based on whether they're for generic nodes or for instance nodes
|
|
375
|
-
const hierarchyLevelDefinitions = this.createHierarchyLevelDefinitionsObservable({
|
|
438
|
+
const hierarchyLevelDefinitions = this.createHierarchyLevelDefinitionsObservable({
|
|
439
|
+
parentNode,
|
|
440
|
+
instanceFilter,
|
|
441
|
+
requestContext,
|
|
442
|
+
});
|
|
376
443
|
const [instanceDefs, genericDefs] = (0, Partition_js_1.partition)(hierarchyLevelDefinitions, (x) => IModelHierarchyDefinition_js_1.HierarchyNodesDefinition.isInstanceNodesQuery(x.hierarchyNodesDefinition));
|
|
377
444
|
// query instance keys and a flag whether they should be hidden
|
|
378
445
|
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) => {
|
|
@@ -415,11 +482,7 @@ class IModelHierarchyProviderImpl {
|
|
|
415
482
|
(0, rxjs_1.mergeMap)((mergedMap) => [...mergedMap.entries()].map(([className, keys]) => ({
|
|
416
483
|
type: "instances",
|
|
417
484
|
instanceKeys: keys.map(({ id, imodelKey }) => ({ className, id, imodelKey })),
|
|
418
|
-
}))))).pipe((0, rxjs_1.map)((key) => ({
|
|
419
|
-
key,
|
|
420
|
-
parentKeys: [],
|
|
421
|
-
label: "",
|
|
422
|
-
})));
|
|
485
|
+
}))))).pipe((0, rxjs_1.map)((key) => ({ key, parentKeys: [], label: "" })));
|
|
423
486
|
// merge visible instance keys from this level & the ones we get recursively requesting from deeper levels
|
|
424
487
|
return (0, rxjs_1.merge)(visibleNodeInstanceKeys.pipe((0, rxjs_1.map)(({ key }) => key)), hiddenParentNodes.pipe((0, rxjs_1.mergeMap)((hiddenNode) => this.getNodeInstanceKeysObs({ parentNode: hiddenNode, requestContext })))).pipe((0, rxjs_1.takeUntil)(this._dispose));
|
|
425
488
|
}
|
|
@@ -431,9 +494,10 @@ class IModelHierarchyProviderImpl {
|
|
|
431
494
|
const requestContext = { requestId: core_bentley_1.Guid.createValue() };
|
|
432
495
|
const loggingCategory = `${LOGGING_NAMESPACE}.GetNodeInstanceKeys`;
|
|
433
496
|
const timer = new core_bentley_1.StopWatch(undefined, true);
|
|
497
|
+
/* v8 ignore next -- @preserve */
|
|
434
498
|
(0, LoggingUtils_js_1.doLog)({
|
|
435
499
|
category: loggingCategory,
|
|
436
|
-
message:
|
|
500
|
+
message: () => `[${requestContext.requestId}] Requesting keys for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
437
501
|
});
|
|
438
502
|
let error;
|
|
439
503
|
let keysCount = 0;
|
|
@@ -441,10 +505,10 @@ class IModelHierarchyProviderImpl {
|
|
|
441
505
|
error = e;
|
|
442
506
|
throw e;
|
|
443
507
|
}), (0, rxjs_1.finalize)(() => {
|
|
508
|
+
/* v8 ignore next -- @preserve */
|
|
444
509
|
(0, LoggingUtils_js_1.doLog)({
|
|
445
510
|
category: loggingCategory,
|
|
446
|
-
message:
|
|
447
|
-
/* c8 ignore next 3 */ error
|
|
511
|
+
message: () => error
|
|
448
512
|
? `[${requestContext.requestId}] Error creating node instance keys for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}: ${error instanceof Error ? error.message : error.toString()}`
|
|
449
513
|
: `[${requestContext.requestId}] Returned ${keysCount} instance keys for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)} in ${timer.currentSeconds.toFixed(2)} s.`,
|
|
450
514
|
});
|
|
@@ -461,13 +525,7 @@ function processNodes(processor, parentNode) {
|
|
|
461
525
|
return (nodes) => nodes.pipe((0, rxjs_1.mergeMap)((node) => processor({ node, parentNode })));
|
|
462
526
|
}
|
|
463
527
|
function applyLabelsFormatting(node, valueFormatter) {
|
|
464
|
-
return (0, rxjs_1.from)((0, presentation_shared_1.formatConcatenatedValue)({
|
|
465
|
-
value: node.label,
|
|
466
|
-
valueFormatter,
|
|
467
|
-
})).pipe((0, rxjs_1.map)((label) => ({
|
|
468
|
-
...node,
|
|
469
|
-
label,
|
|
470
|
-
})));
|
|
528
|
+
return (0, rxjs_1.from)((0, presentation_shared_1.formatConcatenatedValue)({ value: node.label, valueFormatter })).pipe((0, rxjs_1.map)((label) => ({ ...node, label })));
|
|
471
529
|
}
|
|
472
530
|
function createParentNodeKeysList(parentNode) {
|
|
473
531
|
if (!parentNode) {
|
|
@@ -479,30 +537,35 @@ function createInstanceKeysFilteredQuery(query, targetInstanceKeys) {
|
|
|
479
537
|
if (!targetInstanceKeys || !targetInstanceKeys.length) {
|
|
480
538
|
return query;
|
|
481
539
|
}
|
|
482
|
-
|
|
483
|
-
if (targetInstanceKeys.length < MAX_ALLOWED_BINDINGS) {
|
|
540
|
+
if (Array.isArray(query.bindings)) {
|
|
484
541
|
return {
|
|
485
542
|
...query,
|
|
486
543
|
ecsql: `
|
|
487
544
|
SELECT *
|
|
488
545
|
FROM (${query.ecsql}) q
|
|
489
|
-
|
|
546
|
+
JOIN IdSet(?) targetInstanceKeys ON targetInstanceKeys.id = q.ECInstanceId
|
|
547
|
+
ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES
|
|
490
548
|
`,
|
|
491
|
-
bindings: [...
|
|
549
|
+
bindings: [...query.bindings, { type: "idset", value: targetInstanceKeys.map((k) => k.id) }],
|
|
492
550
|
};
|
|
493
551
|
}
|
|
494
|
-
|
|
552
|
+
const ecsqlVarTargetInstanceKeys = `${Utils_js_1.ECSQL_PREFIX}targetInstanceKeys`;
|
|
495
553
|
return {
|
|
496
554
|
...query,
|
|
497
555
|
ecsql: `
|
|
498
556
|
SELECT *
|
|
499
557
|
FROM (${query.ecsql}) q
|
|
500
|
-
|
|
558
|
+
JOIN IdSet(:${ecsqlVarTargetInstanceKeys}) targetInstanceKeys ON targetInstanceKeys.id = q.ECInstanceId
|
|
559
|
+
ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES
|
|
501
560
|
`,
|
|
502
|
-
bindings:
|
|
561
|
+
bindings: {
|
|
562
|
+
...query.bindings,
|
|
563
|
+
[ecsqlVarTargetInstanceKeys]: { type: "idset", value: targetInstanceKeys.map((k) => k.id) },
|
|
564
|
+
},
|
|
503
565
|
};
|
|
504
|
-
/* c8 ignore end */
|
|
505
566
|
}
|
|
567
|
+
// TODO: MISSING_COVERAGE
|
|
568
|
+
/* v8 ignore start */
|
|
506
569
|
function mergeNodes(source) {
|
|
507
570
|
return (0, rxjs_1.from)(source).pipe((0, rxjs_1.reduce)((acc, input) => {
|
|
508
571
|
for (let i = 0; i < acc.length; ++i) {
|
|
@@ -513,11 +576,25 @@ function mergeNodes(source) {
|
|
|
513
576
|
// the first argument for `tryMergeNodes` acts as the primary data source, so we have to make sure we pass
|
|
514
577
|
// the node with higher `imodelAccessIndex` first
|
|
515
578
|
const candidates = input.imodelAccessIndex > acc[i].imodelAccessIndex
|
|
516
|
-
? {
|
|
517
|
-
|
|
579
|
+
? {
|
|
580
|
+
imodelAccess: input.imodelAccess,
|
|
581
|
+
imodelAccessIndex: input.imodelAccessIndex,
|
|
582
|
+
primary: input.node,
|
|
583
|
+
secondary: acc[i].node,
|
|
584
|
+
}
|
|
585
|
+
: {
|
|
586
|
+
imodelAccess: acc[i].imodelAccess,
|
|
587
|
+
imodelAccessIndex: acc[i].imodelAccessIndex,
|
|
588
|
+
primary: acc[i].node,
|
|
589
|
+
secondary: input.node,
|
|
590
|
+
};
|
|
518
591
|
const merged = tryMergeNodes(candidates.primary, candidates.secondary);
|
|
519
592
|
if (merged) {
|
|
520
|
-
acc[i] = {
|
|
593
|
+
acc[i] = {
|
|
594
|
+
node: merged,
|
|
595
|
+
imodelAccess: candidates.imodelAccess,
|
|
596
|
+
imodelAccessIndex: candidates.imodelAccessIndex,
|
|
597
|
+
};
|
|
521
598
|
return acc;
|
|
522
599
|
}
|
|
523
600
|
}
|
|
@@ -561,10 +638,7 @@ function tryMergeInstanceNodes(primary, secondary) {
|
|
|
561
638
|
primary.key.instanceKeys.some((lhsKey) => secondary.key.instanceKeys.some((rhsKey) => presentation_shared_1.InstanceKey.equals(lhsKey, rhsKey)))) {
|
|
562
639
|
return {
|
|
563
640
|
...primary,
|
|
564
|
-
key: {
|
|
565
|
-
type: "instances",
|
|
566
|
-
instanceKeys: primary.key.instanceKeys.concat(secondary.key.instanceKeys),
|
|
567
|
-
},
|
|
641
|
+
key: { type: "instances", instanceKeys: primary.key.instanceKeys.concat(secondary.key.instanceKeys) },
|
|
568
642
|
...mergeBaseNodeAttributes(primary, secondary),
|
|
569
643
|
};
|
|
570
644
|
}
|
|
@@ -572,14 +646,12 @@ function tryMergeInstanceNodes(primary, secondary) {
|
|
|
572
646
|
}
|
|
573
647
|
function tryMergeGenericNodes(primary, secondary) {
|
|
574
648
|
if (HierarchyNode_js_1.HierarchyNode.isGeneric(primary) && HierarchyNode_js_1.HierarchyNode.isGeneric(secondary) && primary.key.id === secondary.key.id) {
|
|
575
|
-
return {
|
|
576
|
-
...primary,
|
|
577
|
-
...mergeBaseNodeAttributes(primary, secondary),
|
|
578
|
-
};
|
|
649
|
+
return { ...primary, ...mergeBaseNodeAttributes(primary, secondary) };
|
|
579
650
|
}
|
|
580
651
|
return undefined;
|
|
581
652
|
}
|
|
582
653
|
function tryMergeNodes(primary, secondary) {
|
|
583
654
|
return tryMergeInstanceNodes(primary, secondary) ?? tryMergeGenericNodes(primary, secondary) ?? undefined;
|
|
584
655
|
}
|
|
656
|
+
/* v8 ignore stop */
|
|
585
657
|
//# sourceMappingURL=IModelHierarchyProvider.js.map
|