@itwin/tree-widget-react 3.16.1 → 3.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -2
- package/lib/cjs/tree-widget-react/components/SelectableTree.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/TreeSelector.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/TreeWidgetUiItemsProvider.js +1 -1
- package/lib/cjs/tree-widget-react/components/TreeWidgetUiItemsProvider.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/tree-header/TreeHeader.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/tree-header/TreeWithHeader.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTree.d.ts +2 -2
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTree.js +2 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTree.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +13 -0
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +90 -73
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.d.ts +3 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +21 -8
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.d.ts +21 -9
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +290 -242
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.d.ts +2 -0
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js +16 -7
- package/lib/cjs/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/UseActiveViewport.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/ProgressOverlay.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/Tree.d.ts +2 -2
- package/lib/cjs/tree-widget-react/components/trees/common/components/Tree.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/TreeNodeCheckbox.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/TreeNodeCheckbox.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/TreeRenderer.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/TreeRenderer.js +2 -2
- package/lib/cjs/tree-widget-react/components/trees/common/components/TreeRenderer.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/VisibilityTree.d.ts +3 -3
- package/lib/cjs/tree-widget-react/components/trees/common/components/VisibilityTree.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTree.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTree.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +8 -5
- package/lib/cjs/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/UseModelsTree.js +2 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/UseModelsTree.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/Utils.d.ts +1 -4
- package/lib/cjs/tree-widget-react/components/trees/models-tree/Utils.js +1 -4
- package/lib/cjs/tree-widget-react/components/trees/models-tree/Utils.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +13 -12
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +251 -278
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNode.d.ts +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNode.js.map +1 -1
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +47 -35
- package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -1
- package/lib/cjs/tree-widget-react-internal.d.ts +2 -1
- package/lib/cjs/tree-widget-react-internal.js +4 -1
- package/lib/cjs/tree-widget-react-internal.js.map +1 -1
- package/lib/esm/tree-widget-react/components/SelectableTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/TreeSelector.js.map +1 -1
- package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js +1 -1
- package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js.map +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/TreeHeader.js.map +1 -1
- package/lib/esm/tree-widget-react/components/tree-header/TreeWithHeader.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js +2 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +13 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +90 -73
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.d.ts +3 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +22 -9
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.d.ts +21 -9
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +290 -242
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.d.ts +2 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js +16 -7
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseActiveViewport.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeCheckbox.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeCheckbox.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.d.ts +3 -3
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +9 -6
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js +2 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.d.ts +1 -4
- package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.js +1 -4
- package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +13 -12
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +252 -279
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNode.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNode.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +47 -35
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react-internal.d.ts +2 -1
- package/lib/esm/tree-widget-react-internal.js +2 -1
- package/lib/esm/tree-widget-react-internal.js.map +1 -1
- package/package.json +1 -1
package/lib/cjs/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js
CHANGED
|
@@ -8,7 +8,6 @@ exports.ModelsTreeIdsCache = void 0;
|
|
|
8
8
|
const rxjs_1 = require("rxjs");
|
|
9
9
|
const core_bentley_1 = require("@itwin/core-bentley");
|
|
10
10
|
const core_common_1 = require("@itwin/core-common");
|
|
11
|
-
const Rxjs_js_1 = require("../../common/Rxjs.js");
|
|
12
11
|
const Utils_js_1 = require("../../common/Utils.js");
|
|
13
12
|
/** @internal */
|
|
14
13
|
class ModelsTreeIdsCache {
|
|
@@ -27,7 +26,7 @@ class ModelsTreeIdsCache {
|
|
|
27
26
|
constructor(queryExecutor, hierarchyConfig, componentId) {
|
|
28
27
|
this.#hierarchyConfig = hierarchyConfig;
|
|
29
28
|
this.#queryExecutor = queryExecutor;
|
|
30
|
-
this.#categoryElementCounts = new ModelCategoryElementsCountCache(
|
|
29
|
+
this.#categoryElementCounts = new ModelCategoryElementsCountCache((input) => this.queryCategoryElementCounts(input));
|
|
31
30
|
this.#modelKeyPaths = new Map();
|
|
32
31
|
this.#subjectKeyPaths = new Map();
|
|
33
32
|
this.#categoryKeyPaths = new Map();
|
|
@@ -37,78 +36,77 @@ class ModelsTreeIdsCache {
|
|
|
37
36
|
[Symbol.dispose]() {
|
|
38
37
|
this.#categoryElementCounts[Symbol.dispose]();
|
|
39
38
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
39
|
+
querySubjects() {
|
|
40
|
+
return (0, rxjs_1.defer)(() => {
|
|
41
|
+
const subjectsQuery = `
|
|
42
|
+
SELECT
|
|
43
|
+
s.ECInstanceId id,
|
|
44
|
+
s.Parent.Id parentId,
|
|
45
|
+
(
|
|
46
|
+
SELECT m.ECInstanceId
|
|
47
|
+
FROM bis.GeometricModel3d m
|
|
48
|
+
WHERE m.ECInstanceId = HexToId(json_extract(s.JsonProperties, '$.Subject.Model.TargetPartition'))
|
|
49
|
+
AND NOT m.IsPrivate
|
|
50
|
+
AND EXISTS (SELECT 1 FROM ${this.#hierarchyConfig.elementClassSpecification} WHERE Model.Id = m.ECInstanceId)
|
|
51
|
+
) targetPartitionId,
|
|
52
|
+
CASE
|
|
53
|
+
WHEN (
|
|
54
|
+
json_extract(s.JsonProperties, '$.Subject.Job.Bridge') IS NOT NULL
|
|
55
|
+
OR json_extract(s.JsonProperties, '$.Subject.Model.Type') = 'Hierarchy'
|
|
56
|
+
) THEN 1
|
|
57
|
+
ELSE 0
|
|
58
|
+
END hideInHierarchy
|
|
59
|
+
FROM bis.Subject s
|
|
60
|
+
`;
|
|
61
|
+
return this.#queryExecutor.createQueryReader({ ecsql: subjectsQuery }, { rowFormat: "ECSqlPropertyNames", limit: "unbounded", restartToken: `${this.#componentName}/${this.#componentId}/subjects` });
|
|
62
|
+
}).pipe((0, rxjs_1.map)((row) => {
|
|
63
|
+
return { id: row.id, parentId: row.parentId, targetPartitionId: row.targetPartitionId, hideInHierarchy: !!row.hideInHierarchy };
|
|
64
|
+
}));
|
|
64
65
|
}
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
queryModels() {
|
|
67
|
+
return (0, rxjs_1.defer)(() => {
|
|
68
|
+
const modelsQuery = `
|
|
67
69
|
SELECT p.ECInstanceId id, p.Parent.Id parentId
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
70
|
+
FROM bis.InformationPartitionElement p
|
|
71
|
+
INNER JOIN bis.GeometricModel3d m ON m.ModeledElement.Id = p.ECInstanceId
|
|
72
|
+
WHERE
|
|
73
|
+
NOT m.IsPrivate
|
|
74
|
+
${this.#hierarchyConfig.showEmptyModels ? "" : `AND EXISTS (SELECT 1 FROM ${this.#hierarchyConfig.elementClassSpecification} WHERE Model.Id = m.ECInstanceId)`}
|
|
75
|
+
`;
|
|
76
|
+
return this.#queryExecutor.createQueryReader({ ecsql: modelsQuery }, { rowFormat: "ECSqlPropertyNames", limit: "unbounded", restartToken: `${this.#componentName}/${this.#componentId}/models` });
|
|
77
|
+
}).pipe((0, rxjs_1.map)((row) => {
|
|
78
|
+
return { id: row.id, parentId: row.parentId };
|
|
79
|
+
}));
|
|
77
80
|
}
|
|
78
|
-
|
|
79
|
-
this.#subjectInfos ??= (
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
const result = new Map();
|
|
99
|
-
for await (const model of this.queryModels()) {
|
|
100
|
-
(0, Utils_js_1.pushToMap)(result, model.id, model.parentId);
|
|
81
|
+
getSubjectInfos() {
|
|
82
|
+
this.#subjectInfos ??= (0, rxjs_1.forkJoin)({
|
|
83
|
+
subjectInfos: this.querySubjects().pipe((0, rxjs_1.reduce)((acc, subject) => {
|
|
84
|
+
const subjectInfo = {
|
|
85
|
+
parentSubject: subject.parentId,
|
|
86
|
+
hideInHierarchy: subject.hideInHierarchy,
|
|
87
|
+
childSubjects: new Set(),
|
|
88
|
+
childModels: new Set(),
|
|
89
|
+
};
|
|
90
|
+
if (subject.targetPartitionId) {
|
|
91
|
+
subjectInfo.childModels.add(subject.targetPartitionId);
|
|
92
|
+
}
|
|
93
|
+
acc.set(subject.id, subjectInfo);
|
|
94
|
+
return acc;
|
|
95
|
+
}, new Map()), (0, rxjs_1.map)((subjectInfos) => {
|
|
96
|
+
for (const [subjectId, { parentSubject: parentSubjectId }] of subjectInfos.entries()) {
|
|
97
|
+
if (parentSubjectId) {
|
|
98
|
+
const parentSubjectInfo = subjectInfos.get(parentSubjectId);
|
|
99
|
+
(0, core_bentley_1.assert)(!!parentSubjectInfo);
|
|
100
|
+
parentSubjectInfo.childSubjects.add(subjectId);
|
|
101
101
|
}
|
|
102
|
-
return result;
|
|
103
|
-
})(),
|
|
104
|
-
]);
|
|
105
|
-
for (const [subjectId, { parentSubject: parentSubjectId }] of subjectInfos.entries()) {
|
|
106
|
-
if (parentSubjectId) {
|
|
107
|
-
const parentSubjectInfo = subjectInfos.get(parentSubjectId);
|
|
108
|
-
(0, core_bentley_1.assert)(!!parentSubjectInfo);
|
|
109
|
-
parentSubjectInfo.childSubjects.add(subjectId);
|
|
110
102
|
}
|
|
111
|
-
|
|
103
|
+
return subjectInfos;
|
|
104
|
+
})),
|
|
105
|
+
targetPartitionSubjects: this.queryModels().pipe((0, rxjs_1.reduce)((acc, model) => {
|
|
106
|
+
(0, Utils_js_1.pushToMap)(acc, model.id, model.parentId);
|
|
107
|
+
return acc;
|
|
108
|
+
}, new Map())),
|
|
109
|
+
}).pipe((0, rxjs_1.map)(({ subjectInfos, targetPartitionSubjects }) => {
|
|
112
110
|
for (const [partitionId, subjectIds] of targetPartitionSubjects) {
|
|
113
111
|
subjectIds.forEach((subjectId) => {
|
|
114
112
|
const subjectInfo = subjectInfos.get(subjectId);
|
|
@@ -117,13 +115,12 @@ class ModelsTreeIdsCache {
|
|
|
117
115
|
});
|
|
118
116
|
}
|
|
119
117
|
return subjectInfos;
|
|
120
|
-
})();
|
|
118
|
+
}), (0, rxjs_1.shareReplay)());
|
|
121
119
|
return this.#subjectInfos;
|
|
122
120
|
}
|
|
123
121
|
/** Returns ECInstanceIDs of Subjects that either have direct Model or at least one child Subject with a Model. */
|
|
124
|
-
|
|
125
|
-
this.#parentSubjectIds ??= (
|
|
126
|
-
const subjectInfos = await this.getSubjectInfos();
|
|
122
|
+
getParentSubjectIds() {
|
|
123
|
+
this.#parentSubjectIds ??= this.getSubjectInfos().pipe((0, rxjs_1.map)((subjectInfos) => {
|
|
127
124
|
const parentSubjectIds = new Set();
|
|
128
125
|
subjectInfos.forEach((subjectInfo, subjectId) => {
|
|
129
126
|
if (subjectInfo.childModels.size > 0) {
|
|
@@ -136,71 +133,73 @@ class ModelsTreeIdsCache {
|
|
|
136
133
|
}
|
|
137
134
|
});
|
|
138
135
|
return [...parentSubjectIds];
|
|
139
|
-
})();
|
|
136
|
+
}), (0, rxjs_1.shareReplay)());
|
|
140
137
|
return this.#parentSubjectIds;
|
|
141
138
|
}
|
|
142
139
|
/**
|
|
143
140
|
* Returns child subjects of the specified parent subjects as they're displayed in the hierarchy - taking into
|
|
144
141
|
* account `hideInHierarchy` flag.
|
|
145
142
|
*/
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
143
|
+
getChildSubjectIds(parentSubjectIds) {
|
|
144
|
+
return this.getSubjectInfos().pipe((0, rxjs_1.map)((subjectInfos) => {
|
|
145
|
+
const childSubjectIds = new Array();
|
|
146
|
+
parentSubjectIds.forEach((subjectId) => {
|
|
147
|
+
forEachChildSubject(subjectInfos, subjectId, (childSubjectId, childSubjectInfo) => {
|
|
148
|
+
if (!childSubjectInfo.hideInHierarchy) {
|
|
149
|
+
childSubjectIds.push(childSubjectId);
|
|
150
|
+
return "break";
|
|
151
|
+
}
|
|
152
|
+
return "continue";
|
|
153
|
+
});
|
|
156
154
|
});
|
|
157
|
-
|
|
158
|
-
|
|
155
|
+
return childSubjectIds;
|
|
156
|
+
}));
|
|
159
157
|
}
|
|
160
158
|
/** Returns ECInstanceIDs of all Models under specific parent Subjects, including their child Subjects, etc. */
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
159
|
+
getSubjectModelIds(subjectIds) {
|
|
160
|
+
return this.getSubjectInfos().pipe((0, rxjs_1.map)((subjectInfos) => {
|
|
161
|
+
const subjectStack = [...subjectIds];
|
|
162
|
+
const result = new Array();
|
|
163
|
+
while (true) {
|
|
164
|
+
const subjectId = subjectStack.pop();
|
|
165
|
+
if (subjectId === undefined) {
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
const subjectInfo = subjectInfos.get(subjectId);
|
|
169
|
+
if (!subjectInfo) {
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
result.push(...subjectInfo.childModels);
|
|
173
|
+
subjectStack.push(...subjectInfo.childSubjects);
|
|
173
174
|
}
|
|
174
|
-
result
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
return result;
|
|
175
|
+
return result;
|
|
176
|
+
}));
|
|
178
177
|
}
|
|
179
178
|
/** Returns ECInstanceIDs of Models under specific parent Subjects as they are displayed in the hierarchy. */
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
179
|
+
getChildSubjectModelIds(parentSubjectIds) {
|
|
180
|
+
return this.getSubjectInfos().pipe((0, rxjs_1.map)((subjectInfos) => {
|
|
181
|
+
const hiddenSubjectIds = new Array();
|
|
182
|
+
parentSubjectIds.forEach((subjectId) => {
|
|
183
|
+
forEachChildSubject(subjectInfos, subjectId, (childSubjectId, childSubjectInfo) => {
|
|
184
|
+
if (childSubjectInfo.hideInHierarchy) {
|
|
185
|
+
hiddenSubjectIds.push(childSubjectId);
|
|
186
|
+
return "continue";
|
|
187
|
+
}
|
|
188
|
+
return "break";
|
|
189
|
+
});
|
|
190
190
|
});
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
191
|
+
const modelIds = new Array();
|
|
192
|
+
[...parentSubjectIds, ...hiddenSubjectIds].forEach((subjectId) => {
|
|
193
|
+
const subjectInfo = subjectInfos.get(subjectId);
|
|
194
|
+
subjectInfo && modelIds.push(...subjectInfo.childModels);
|
|
195
|
+
});
|
|
196
|
+
return modelIds;
|
|
197
|
+
}));
|
|
198
198
|
}
|
|
199
|
-
|
|
199
|
+
createSubjectInstanceKeysPath(targetSubjectId) {
|
|
200
200
|
let entry = this.#subjectKeyPaths.get(targetSubjectId);
|
|
201
201
|
if (!entry) {
|
|
202
|
-
entry = (
|
|
203
|
-
const subjectInfos = await this.getSubjectInfos();
|
|
202
|
+
entry = this.getSubjectInfos().pipe((0, rxjs_1.map)((subjectInfos) => {
|
|
204
203
|
const result = new Array();
|
|
205
204
|
let currParentId = targetSubjectId;
|
|
206
205
|
while (currParentId) {
|
|
@@ -214,128 +213,111 @@ class ModelsTreeIdsCache {
|
|
|
214
213
|
currParentId = parentInfo?.parentSubject;
|
|
215
214
|
}
|
|
216
215
|
return result.reverse();
|
|
217
|
-
})();
|
|
216
|
+
}), (0, rxjs_1.shareReplay)());
|
|
218
217
|
this.#subjectKeyPaths.set(targetSubjectId, entry);
|
|
219
218
|
}
|
|
220
219
|
return entry;
|
|
221
220
|
}
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
}
|
|
221
|
+
queryModelCategories() {
|
|
222
|
+
return (0, rxjs_1.defer)(() => {
|
|
223
|
+
const query = `
|
|
224
|
+
SELECT
|
|
225
|
+
this.Model.Id modelId,
|
|
226
|
+
this.Category.Id categoryId,
|
|
227
|
+
m.IsPrivate isModelPrivate,
|
|
228
|
+
MAX(IIF(this.Parent.Id IS NULL, 1, 0)) isRootElementCategory
|
|
229
|
+
FROM BisCore.Model m
|
|
230
|
+
JOIN ${this.#hierarchyConfig.elementClassSpecification} this ON m.ECInstanceId = this.Model.Id
|
|
231
|
+
GROUP BY modelId, categoryId, isModelPrivate
|
|
232
|
+
`;
|
|
233
|
+
return this.#queryExecutor.createQueryReader({ ecsql: query }, { rowFormat: "ECSqlPropertyNames", limit: "unbounded", restartToken: `${this.#componentName}/${this.#componentId}/model-categories` });
|
|
234
|
+
}).pipe((0, rxjs_1.map)((row) => {
|
|
235
|
+
return { modelId: row.modelId, categoryId: row.categoryId, isModelPrivate: !!row.isModelPrivate, isRootElementCategory: !!row.isRootElementCategory };
|
|
236
|
+
}));
|
|
236
237
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
}
|
|
238
|
+
queryModeledElements() {
|
|
239
|
+
return (0, rxjs_1.defer)(() => {
|
|
240
|
+
const query = `
|
|
241
|
+
SELECT
|
|
242
|
+
pe.ECInstanceId modeledElementId,
|
|
243
|
+
pe.Category.Id categoryId,
|
|
244
|
+
pe.Model.Id modelId
|
|
245
|
+
FROM BisCore.Model m
|
|
246
|
+
JOIN ${this.#hierarchyConfig.elementClassSpecification} pe ON pe.ECInstanceId = m.ModeledElement.Id
|
|
247
|
+
WHERE
|
|
248
|
+
m.IsPrivate = false
|
|
249
|
+
AND m.ECInstanceId IN (SELECT Model.Id FROM ${this.#hierarchyConfig.elementClassSpecification})
|
|
250
|
+
`;
|
|
251
|
+
return this.#queryExecutor.createQueryReader({ ecsql: query }, { rowFormat: "ECSqlPropertyNames", limit: "unbounded", restartToken: `${this.#componentName}/${this.#componentId}/modeled-elements` });
|
|
252
|
+
}).pipe((0, rxjs_1.map)((row) => {
|
|
253
|
+
return { modelId: row.modelId, categoryId: row.categoryId, modeledElementId: row.modeledElementId };
|
|
254
|
+
}));
|
|
252
255
|
}
|
|
253
|
-
|
|
254
|
-
this.#modelWithCategoryModeledElements ??= (
|
|
255
|
-
const
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
else {
|
|
263
|
-
entry.add(modeledElementId);
|
|
264
|
-
}
|
|
256
|
+
getModelWithCategoryModeledElements() {
|
|
257
|
+
this.#modelWithCategoryModeledElements ??= this.queryModeledElements().pipe((0, rxjs_1.reduce)((acc, { modelId, categoryId, modeledElementId }) => {
|
|
258
|
+
const key = `${modelId}-${categoryId}`;
|
|
259
|
+
const entry = acc.get(key);
|
|
260
|
+
if (entry === undefined) {
|
|
261
|
+
acc.set(key, new Set([modeledElementId]));
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
entry.add(modeledElementId);
|
|
265
265
|
}
|
|
266
|
-
return
|
|
267
|
-
})();
|
|
266
|
+
return acc;
|
|
267
|
+
}, new Map()), (0, rxjs_1.shareReplay)());
|
|
268
268
|
return this.#modelWithCategoryModeledElements;
|
|
269
269
|
}
|
|
270
|
-
|
|
271
|
-
this.#modelInfos ??= (
|
|
272
|
-
const
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
}
|
|
279
|
-
else {
|
|
280
|
-
modelInfos.set(modelId, { categories: new Map([[categoryId, { isRootElementCategory }]]), isModelPrivate });
|
|
281
|
-
}
|
|
270
|
+
getModelInfos() {
|
|
271
|
+
this.#modelInfos ??= this.queryModelCategories().pipe((0, rxjs_1.reduce)((acc, { modelId, categoryId, isModelPrivate, isRootElementCategory }) => {
|
|
272
|
+
const entry = acc.get(modelId);
|
|
273
|
+
if (entry) {
|
|
274
|
+
entry.categories.set(categoryId, { isRootElementCategory });
|
|
275
|
+
entry.isModelPrivate = isModelPrivate;
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
acc.set(modelId, { categories: new Map([[categoryId, { isRootElementCategory }]]), isModelPrivate });
|
|
282
279
|
}
|
|
283
|
-
return
|
|
284
|
-
})();
|
|
280
|
+
return acc;
|
|
281
|
+
}, new Map()), (0, rxjs_1.shareReplay)());
|
|
285
282
|
return this.#modelInfos;
|
|
286
283
|
}
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
});
|
|
293
|
-
return result;
|
|
284
|
+
getAllCategories() {
|
|
285
|
+
return this.getModelInfos().pipe((0, rxjs_1.mergeMap)((modelInfos) => modelInfos.values()), (0, rxjs_1.mergeMap)(({ categories }) => categories.keys()), (0, rxjs_1.reduce)((acc, categoryId) => {
|
|
286
|
+
acc.add(categoryId);
|
|
287
|
+
return acc;
|
|
288
|
+
}, new Set()));
|
|
294
289
|
}
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
const categories = modelInfos.get(modelId)?.categories.keys();
|
|
298
|
-
return categories ? [...categories] : [];
|
|
290
|
+
getModelCategories(modelId) {
|
|
291
|
+
return this.getModelInfos().pipe((0, rxjs_1.mergeMap)((modelInfos) => modelInfos.get(modelId)?.categories.keys() ?? []), (0, rxjs_1.toArray)());
|
|
299
292
|
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
293
|
+
hasSubModel(elementId) {
|
|
294
|
+
return this.getModelInfos().pipe((0, rxjs_1.map)((modelInfos) => {
|
|
295
|
+
const modeledElementInfo = modelInfos.get(elementId);
|
|
296
|
+
if (!modeledElementInfo) {
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
299
|
+
return !modeledElementInfo.isModelPrivate;
|
|
300
|
+
}));
|
|
307
301
|
}
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
const result = new Array();
|
|
311
|
-
for (const categoryId of core_bentley_1.Id64.iterable(categoryIds)) {
|
|
302
|
+
getCategoriesModeledElements(modelId, categoryIds) {
|
|
303
|
+
return this.getModelWithCategoryModeledElements().pipe((0, rxjs_1.mergeMap)((modelWithCategoryModeledElements) => (0, rxjs_1.from)(core_bentley_1.Id64.iterable(categoryIds)).pipe((0, rxjs_1.reduce)((acc, categoryId) => {
|
|
312
304
|
const entry = modelWithCategoryModeledElements.get(`${modelId}-${categoryId}`);
|
|
313
305
|
if (entry !== undefined) {
|
|
314
|
-
|
|
306
|
+
acc.push(...entry);
|
|
315
307
|
}
|
|
316
|
-
|
|
317
|
-
|
|
308
|
+
return acc;
|
|
309
|
+
}, new Array()))));
|
|
318
310
|
}
|
|
319
|
-
|
|
311
|
+
createModelInstanceKeyPaths(modelId) {
|
|
320
312
|
let entry = this.#modelKeyPaths.get(modelId);
|
|
321
313
|
if (!entry) {
|
|
322
|
-
entry = (
|
|
323
|
-
const result = new Array();
|
|
324
|
-
const subjectInfos = (await this.getSubjectInfos()).entries();
|
|
325
|
-
for (const [modelSubjectId, subjectInfo] of subjectInfos) {
|
|
326
|
-
if (subjectInfo.childModels.has(modelId)) {
|
|
327
|
-
const subjectPath = await this.createSubjectInstanceKeysPath(modelSubjectId);
|
|
328
|
-
result.push([...subjectPath, { className: "BisCore.GeometricModel3d", id: modelId }]);
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
return result;
|
|
332
|
-
})();
|
|
314
|
+
entry = this.getSubjectInfos().pipe((0, rxjs_1.mergeMap)((subjectInfos) => subjectInfos.entries()), (0, rxjs_1.filter)(([_, subjectInfo]) => subjectInfo.childModels.has(modelId)), (0, rxjs_1.mergeMap)(([modelSubjectId]) => this.createSubjectInstanceKeysPath(modelSubjectId).pipe((0, rxjs_1.map)((path) => [...path, { className: "BisCore.GeometricModel3d", id: modelId }]))), (0, rxjs_1.toArray)(), (0, rxjs_1.shareReplay)());
|
|
333
315
|
this.#modelKeyPaths.set(modelId, entry);
|
|
334
316
|
}
|
|
335
317
|
return entry;
|
|
336
318
|
}
|
|
337
|
-
|
|
338
|
-
return (0,
|
|
319
|
+
queryCategoryElementCounts(input) {
|
|
320
|
+
return (0, rxjs_1.from)(input).pipe((0, rxjs_1.reduce)((acc, { modelId, categoryId }) => {
|
|
339
321
|
const entry = acc.get(modelId);
|
|
340
322
|
if (!entry) {
|
|
341
323
|
acc.set(modelId, new Set([categoryId]));
|
|
@@ -347,73 +329,64 @@ class ModelsTreeIdsCache {
|
|
|
347
329
|
}, new Map()), (0, rxjs_1.mergeMap)((modelCategoryMap) => modelCategoryMap.entries()), (0, rxjs_1.map)(([modelId, categoryIds]) => `Model.Id = ${modelId} AND Category.Id IN (${[...categoryIds].join(", ")})`),
|
|
348
330
|
// we may have thousands of where clauses here, and sending a single query with all of them could take a
|
|
349
331
|
// long time - instead, split it into smaller chunks
|
|
350
|
-
(0, rxjs_1.bufferCount)(100), (0, rxjs_1.mergeMap)(
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
)
|
|
332
|
+
(0, rxjs_1.bufferCount)(100), (0, rxjs_1.mergeMap)((whereClauses) => (0, rxjs_1.defer)(() => this.#queryExecutor.createQueryReader({
|
|
333
|
+
ctes: [
|
|
334
|
+
`
|
|
335
|
+
CategoryElements(id, modelId, categoryId) AS (
|
|
336
|
+
SELECT ECInstanceId, Model.Id, Category.Id
|
|
337
|
+
FROM ${this.#hierarchyConfig.elementClassSpecification}
|
|
338
|
+
WHERE
|
|
339
|
+
Parent.Id IS NULL
|
|
340
|
+
AND (
|
|
341
|
+
${whereClauses.join(" OR ")}
|
|
342
|
+
)
|
|
362
343
|
|
|
363
|
-
|
|
344
|
+
UNION ALL
|
|
364
345
|
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
346
|
+
SELECT c.ECInstanceId, p.modelId, p.categoryId
|
|
347
|
+
FROM ${this.#hierarchyConfig.elementClassSpecification} c
|
|
348
|
+
JOIN CategoryElements p ON c.Parent.Id = p.id
|
|
349
|
+
)
|
|
350
|
+
`,
|
|
351
|
+
],
|
|
352
|
+
ecsql: `
|
|
353
|
+
SELECT modelId, categoryId, COUNT(id) elementsCount
|
|
354
|
+
FROM CategoryElements
|
|
355
|
+
GROUP BY modelId, categoryId
|
|
369
356
|
`,
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
restartToken: `${this.#componentName}/${this.#componentId}/category-element-counts/${core_bentley_1.Guid.createValue()}`,
|
|
357
|
+
}, {
|
|
358
|
+
rowFormat: "ECSqlPropertyNames",
|
|
359
|
+
limit: "unbounded",
|
|
360
|
+
restartToken: `${this.#componentName}/${this.#componentId}/category-element-counts/${core_bentley_1.Guid.createValue()}`,
|
|
361
|
+
}))), (0, rxjs_1.reduce)(({ acc, createKey }, row) => {
|
|
362
|
+
acc.set(createKey({ modelId: row.modelId, categoryId: row.categoryId }), {
|
|
363
|
+
modelId: row.modelId,
|
|
364
|
+
categoryId: row.categoryId,
|
|
365
|
+
elementsCount: row.elementsCount,
|
|
380
366
|
});
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
}
|
|
367
|
+
return { acc, createKey };
|
|
368
|
+
}, {
|
|
369
|
+
acc: new Map(),
|
|
370
|
+
createKey: (keyProps) => `${keyProps.modelId}-${keyProps.categoryId}`,
|
|
371
|
+
}), (0, rxjs_1.mergeMap)(({ acc: result, createKey }) => {
|
|
385
372
|
input.forEach(({ modelId, categoryId }) => {
|
|
386
|
-
if (!result.
|
|
387
|
-
result.
|
|
373
|
+
if (!result.has(createKey({ modelId, categoryId }))) {
|
|
374
|
+
result.set(createKey({ modelId, categoryId }), { categoryId, modelId, elementsCount: 0 });
|
|
388
375
|
}
|
|
389
376
|
});
|
|
390
|
-
return result;
|
|
391
|
-
}), (0, rxjs_1.
|
|
377
|
+
return (0, rxjs_1.from)(result.values());
|
|
378
|
+
}), (0, rxjs_1.toArray)());
|
|
392
379
|
}
|
|
393
|
-
|
|
380
|
+
getCategoryElementsCount(modelId, categoryId) {
|
|
394
381
|
return this.#categoryElementCounts.getCategoryElementsCount(modelId, categoryId);
|
|
395
382
|
}
|
|
396
|
-
|
|
383
|
+
createCategoryInstanceKeyPaths(categoryId) {
|
|
397
384
|
let entry = this.#categoryKeyPaths.get(categoryId);
|
|
398
385
|
if (!entry) {
|
|
399
|
-
entry = (
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
const categoryEntry = modelInfo.categories.get(categoryId);
|
|
404
|
-
if (categoryEntry?.isRootElementCategory) {
|
|
405
|
-
result.add(modelId);
|
|
406
|
-
}
|
|
407
|
-
});
|
|
408
|
-
const categoryPaths = new Array();
|
|
409
|
-
for (const categoryModelId of [...result]) {
|
|
410
|
-
const modelPaths = await this.createModelInstanceKeyPaths(categoryModelId);
|
|
411
|
-
for (const modelPath of modelPaths) {
|
|
412
|
-
categoryPaths.push([...modelPath, { className: "BisCore.SpatialCategory", id: categoryId }]);
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
return categoryPaths;
|
|
416
|
-
})();
|
|
386
|
+
entry = this.getModelInfos().pipe((0, rxjs_1.mergeMap)((modelInfos) => modelInfos.entries()), (0, rxjs_1.filter)(([_, modelInfo]) => !!modelInfo.categories.get(categoryId)?.isRootElementCategory), (0, rxjs_1.mergeMap)(([categoryModelId]) => this.createModelInstanceKeyPaths(categoryModelId)), (0, rxjs_1.mergeMap)((modelPaths) => modelPaths), (0, rxjs_1.reduce)((acc, modelPath) => {
|
|
387
|
+
acc.push([...modelPath, { className: "BisCore.SpatialCategory", id: categoryId }]);
|
|
388
|
+
return acc;
|
|
389
|
+
}, new Array()), (0, rxjs_1.shareReplay)());
|
|
417
390
|
this.#categoryKeyPaths.set(categoryId, entry);
|
|
418
391
|
}
|
|
419
392
|
return entry;
|
|
@@ -437,7 +410,7 @@ class ModelCategoryElementsCountCache {
|
|
|
437
410
|
#subscription;
|
|
438
411
|
constructor(loader) {
|
|
439
412
|
this.#subscription = this.#requestsStream
|
|
440
|
-
.pipe((0, rxjs_1.bufferTime)(20), (0, rxjs_1.filter)((requests) => requests.length > 0), (0, rxjs_1.mergeMap)(
|
|
413
|
+
.pipe((0, rxjs_1.bufferTime)(20), (0, rxjs_1.filter)((requests) => requests.length > 0), (0, rxjs_1.mergeMap)((requests) => loader(requests)), (0, rxjs_1.mergeAll)())
|
|
441
414
|
.subscribe({
|
|
442
415
|
next: ({ modelId, categoryId, elementsCount }) => {
|
|
443
416
|
const subject = this.#cache.get(`${modelId}${categoryId}`);
|
|
@@ -449,16 +422,16 @@ class ModelCategoryElementsCountCache {
|
|
|
449
422
|
[Symbol.dispose]() {
|
|
450
423
|
this.#subscription.unsubscribe();
|
|
451
424
|
}
|
|
452
|
-
|
|
425
|
+
getCategoryElementsCount(modelId, categoryId) {
|
|
453
426
|
const cacheKey = `${modelId}${categoryId}`;
|
|
454
427
|
let result = this.#cache.get(cacheKey);
|
|
455
428
|
if (result !== undefined) {
|
|
456
|
-
return (0, rxjs_1.
|
|
429
|
+
return (0, rxjs_1.from)(result).pipe((0, rxjs_1.take)(1));
|
|
457
430
|
}
|
|
458
431
|
result = new rxjs_1.ReplaySubject(1);
|
|
459
432
|
this.#cache.set(cacheKey, result);
|
|
460
433
|
this.#requestsStream.next({ modelId, categoryId });
|
|
461
|
-
return (0, rxjs_1.
|
|
434
|
+
return (0, rxjs_1.from)(result).pipe((0, rxjs_1.take)(1));
|
|
462
435
|
}
|
|
463
436
|
}
|
|
464
437
|
//# sourceMappingURL=ModelsTreeIdsCache.js.map
|