@itwin/tree-widget-react 4.0.0-alpha.21 → 4.0.0-alpha.23
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/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.js +1 -1
- package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js +2 -2
- 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/CategoriesTreeComponent.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js +3 -3
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +11 -11
- 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 -3
- package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +25 -25
- 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 +2 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +23 -39
- 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/{UseFilteredPaths.d.ts → UseSearchPaths.d.ts} +8 -8
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/{UseFilteredPaths.js → UseSearchPaths.js} +21 -21
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseSearchPaths.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.d.ts +7 -7
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.js +11 -11
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/{FilteredTree.d.ts → SearchResultsTree.d.ts} +8 -8
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/{FilteredTree.js → SearchResultsTree.js} +62 -62
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/SearchResultsTree.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js +7 -7
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.d.ts +3 -3
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js +25 -25
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.d.ts +4 -4
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.js +3 -2
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.d.ts +4 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js +36 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseSearchPaths.d.ts +20 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/{UseFilteredPaths.js → UseSearchPaths.js} +19 -19
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseSearchPaths.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.d.ts +4 -4
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.js +8 -8
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/{FilteredTree.d.ts → SearchResultsTree.d.ts} +9 -9
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/SearchResultsTree.js +168 -0
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/SearchResultsTree.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/TreeErrors.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/common/TreeErrors.js +3 -3
- package/lib/esm/tree-widget-react/components/trees/common/TreeErrors.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/TreeWidgetViewport.js +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/TreeWidgetViewport.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseTelemetryContext.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/UseTelemetryContext.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/Utils.d.ts +3 -3
- package/lib/esm/tree-widget-react/components/trees/common/Utils.js +17 -17
- package/lib/esm/tree-widget-react/components/trees/common/Utils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.css +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.d.ts +6 -6
- package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.js +11 -11
- package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.js +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 +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/internal/Utils.d.ts +21 -5
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js +24 -8
- package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.d.ts +1 -6
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js +4 -11
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.d.ts +18 -18
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.js +32 -32
- package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseSearchResultsTree.d.ts +91 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseSearchResultsTree.js +112 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseSearchResultsTree.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.d.ts +6 -10
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.js +27 -15
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/index.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/index.js +1 -1
- package/lib/esm/tree-widget-react/components/trees/index.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js +3 -3
- 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/ModelsTreeComponent.d.ts +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js +5 -5
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.d.ts +2 -2
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +12 -12
- package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.d.ts +29 -29
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js +26 -26
- package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +4 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +36 -1
- 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/UseSearchPaths.d.ts +41 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/{UseFilteredPaths.js → UseSearchPaths.js} +47 -47
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseSearchPaths.js.map +1 -0
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.d.ts +7 -7
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.js +11 -11
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/{FilteredTree.d.ts → SearchResultsTree.d.ts} +8 -8
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/{FilteredTree.js → SearchResultsTree.js} +43 -43
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/SearchResultsTree.js.map +1 -0
- package/lib/public/locales/en/TreeWidget.json +13 -13
- package/package.json +7 -7
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/FilteredTree.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseFilteredPaths.d.ts +0 -20
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseFilteredPaths.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/FilteredTree.js +0 -168
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/FilteredTree.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseFilteredTree.d.ts +0 -91
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseFilteredTree.js +0 -112
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseFilteredTree.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.d.ts +0 -41
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js.map +0 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/FilteredTree.js.map +0 -1
|
@@ -4,87 +4,87 @@
|
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
import { assert } from "@itwin/core-bentley";
|
|
6
6
|
import { CLASS_NAME_Category, CLASS_NAME_Model, CLASS_NAME_Subject } from "../../../common/internal/ClassNameDefinitions.js";
|
|
7
|
-
import {
|
|
7
|
+
import { createSearchResultsTree, SearchResultsNodesHandler } from "../../../common/internal/visibility/BaseSearchResultsTree.js";
|
|
8
8
|
/** @internal */
|
|
9
|
-
export async function
|
|
10
|
-
const { imodelAccess,
|
|
11
|
-
return
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
export async function createModelsSearchResultsTree(props) {
|
|
10
|
+
const { imodelAccess, searchPaths } = props;
|
|
11
|
+
return createSearchResultsTree({
|
|
12
|
+
searchResultsNodesHandler: new ModelsTreeSearchResultsNodesHandler({ imodelAccess }),
|
|
13
|
+
searchPaths,
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
|
-
class
|
|
16
|
+
class ModelsTreeSearchResultsNodesHandler extends SearchResultsNodesHandler {
|
|
17
17
|
#props;
|
|
18
18
|
constructor(props) {
|
|
19
19
|
super();
|
|
20
20
|
this.#props = props;
|
|
21
21
|
}
|
|
22
|
-
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
return this.
|
|
22
|
+
convertNodesToSearchTargets(searchResultsNodes) {
|
|
23
|
+
const searchTargets = {};
|
|
24
|
+
searchResultsNodes.forEach((searchResultsNode) => this.collectSearchTargets(searchTargets, searchResultsNode));
|
|
25
|
+
return this.convertInternalSearchTargets(searchTargets);
|
|
26
26
|
}
|
|
27
|
-
async
|
|
28
|
-
|
|
29
|
-
if (!
|
|
27
|
+
async getProcessedSearchResultsNodes() { }
|
|
28
|
+
convertInternalSearchTargets(searchTargets) {
|
|
29
|
+
if (!searchTargets.categories && !searchTargets.subjectIds && !searchTargets.elements && !searchTargets.modelIds) {
|
|
30
30
|
return undefined;
|
|
31
31
|
}
|
|
32
32
|
return {
|
|
33
|
-
categories:
|
|
34
|
-
? [...
|
|
33
|
+
categories: searchTargets.categories
|
|
34
|
+
? [...searchTargets.categories.entries()].map(([modelId, categoryIds]) => {
|
|
35
35
|
return { modelId, categoryIds };
|
|
36
36
|
})
|
|
37
37
|
: undefined,
|
|
38
|
-
elements:
|
|
39
|
-
? [...
|
|
38
|
+
elements: searchTargets.elements
|
|
39
|
+
? [...searchTargets.elements.entries()].map(([modelCategoryKey, elements]) => {
|
|
40
40
|
const { modelId, categoryId } = this.parseModelCategoryKey(modelCategoryKey);
|
|
41
41
|
return { modelId, categoryId, elements };
|
|
42
42
|
})
|
|
43
43
|
: undefined,
|
|
44
|
-
modelIds:
|
|
45
|
-
subjectIds:
|
|
44
|
+
modelIds: searchTargets.modelIds,
|
|
45
|
+
subjectIds: searchTargets.subjectIds,
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
|
-
|
|
49
|
-
if (
|
|
50
|
-
this.addTarget(
|
|
48
|
+
collectSearchTargets(searchTargets, searchResultsNode) {
|
|
49
|
+
if (searchResultsNode.isSearchTarget) {
|
|
50
|
+
this.addTarget(searchTargets, searchResultsNode);
|
|
51
51
|
return;
|
|
52
52
|
}
|
|
53
|
-
if (
|
|
54
|
-
// need to add parent ids as
|
|
55
|
-
this.addTarget(
|
|
53
|
+
if (searchResultsNode.type === "element") {
|
|
54
|
+
// need to add parent ids as search target will be an element
|
|
55
|
+
this.addTarget(searchTargets, searchResultsNode);
|
|
56
56
|
}
|
|
57
|
-
if (!
|
|
57
|
+
if (!searchResultsNode.children) {
|
|
58
58
|
return;
|
|
59
59
|
}
|
|
60
|
-
for (const child of
|
|
61
|
-
this.
|
|
60
|
+
for (const child of searchResultsNode.children.values()) {
|
|
61
|
+
this.collectSearchTargets(searchTargets, child);
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
|
-
addTarget(
|
|
64
|
+
addTarget(searchTargets, node) {
|
|
65
65
|
switch (node.type) {
|
|
66
66
|
case "subject":
|
|
67
|
-
(
|
|
67
|
+
(searchTargets.subjectIds ??= new Set()).add(node.id);
|
|
68
68
|
return;
|
|
69
69
|
case "model":
|
|
70
|
-
(
|
|
70
|
+
(searchTargets.modelIds ??= new Set()).add(node.id);
|
|
71
71
|
return;
|
|
72
72
|
case "category":
|
|
73
|
-
const categories = (
|
|
73
|
+
const categories = (searchTargets.categories ??= new Map()).get(node.modelId);
|
|
74
74
|
if (categories) {
|
|
75
75
|
categories.add(node.id);
|
|
76
76
|
return;
|
|
77
77
|
}
|
|
78
|
-
|
|
78
|
+
searchTargets.categories.set(node.modelId, new Set([node.id]));
|
|
79
79
|
return;
|
|
80
80
|
case "element":
|
|
81
81
|
const modelCategoryKey = this.createModelCategoryKey(node.modelId, node.categoryId);
|
|
82
|
-
const elements = (
|
|
82
|
+
const elements = (searchTargets.elements ??= new Map()).get(modelCategoryKey);
|
|
83
83
|
if (elements) {
|
|
84
|
-
elements.set(node.id, {
|
|
84
|
+
elements.set(node.id, { isSearchTarget: node.isSearchTarget });
|
|
85
85
|
}
|
|
86
86
|
else {
|
|
87
|
-
|
|
87
|
+
searchTargets.elements.set(modelCategoryKey, new Map([[node.id, { isSearchTarget: node.isSearchTarget }]]));
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
}
|
|
@@ -95,11 +95,11 @@ class ModelsTreeFilteredNodesHandler extends FilteredNodesHandler {
|
|
|
95
95
|
const [modelId, categoryId] = key.split("-");
|
|
96
96
|
return { modelId, categoryId };
|
|
97
97
|
}
|
|
98
|
-
|
|
98
|
+
createSearchResultsTreeNode({ type, id, isSearchTarget, parent, }) {
|
|
99
99
|
if (type === "subject" || type === "model") {
|
|
100
100
|
return {
|
|
101
101
|
id,
|
|
102
|
-
|
|
102
|
+
isSearchTarget,
|
|
103
103
|
type,
|
|
104
104
|
};
|
|
105
105
|
}
|
|
@@ -107,7 +107,7 @@ class ModelsTreeFilteredNodesHandler extends FilteredNodesHandler {
|
|
|
107
107
|
assert("type" in parent && parent.type === "model");
|
|
108
108
|
return {
|
|
109
109
|
id,
|
|
110
|
-
|
|
110
|
+
isSearchTarget,
|
|
111
111
|
type,
|
|
112
112
|
modelId: parent.id,
|
|
113
113
|
};
|
|
@@ -115,7 +115,7 @@ class ModelsTreeFilteredNodesHandler extends FilteredNodesHandler {
|
|
|
115
115
|
if ("type" in parent && parent.type === "category") {
|
|
116
116
|
return {
|
|
117
117
|
id,
|
|
118
|
-
|
|
118
|
+
isSearchTarget,
|
|
119
119
|
type,
|
|
120
120
|
modelId: parent.modelId,
|
|
121
121
|
categoryId: parent.id,
|
|
@@ -124,7 +124,7 @@ class ModelsTreeFilteredNodesHandler extends FilteredNodesHandler {
|
|
|
124
124
|
if ("type" in parent && parent.type === "element") {
|
|
125
125
|
return {
|
|
126
126
|
id,
|
|
127
|
-
|
|
127
|
+
isSearchTarget,
|
|
128
128
|
type,
|
|
129
129
|
modelId: parent.modelId,
|
|
130
130
|
categoryId: parent.categoryId,
|
|
@@ -145,4 +145,4 @@ class ModelsTreeFilteredNodesHandler extends FilteredNodesHandler {
|
|
|
145
145
|
return "element";
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
|
-
//# sourceMappingURL=
|
|
148
|
+
//# sourceMappingURL=SearchResultsTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchResultsTree.js","sourceRoot":"","sources":["../../../../../../../../src/tree-widget-react/components/trees/models-tree/internal/visibility/SearchResultsTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { CLASS_NAME_Category, CLASS_NAME_Model, CLASS_NAME_Subject } from \"../../../common/internal/ClassNameDefinitions.js\";\nimport { createSearchResultsTree, SearchResultsNodesHandler } from \"../../../common/internal/visibility/BaseSearchResultsTree.js\";\n\nimport type { Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { HierarchySearchPath } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector } from \"@itwin/presentation-shared\";\nimport type { CategoryId, ElementId, ModelId } from \"../../../common/internal/Types.js\";\nimport type { BaseSearchResultsTreeNode, SearchResultsTree, SearchResultsTreeRootNode } from \"../../../common/internal/visibility/BaseSearchResultsTree.js\";\n\ninterface GenericSearchResultsTreeNode extends BaseSearchResultsTreeNode<GenericSearchResultsTreeNode> {\n type: \"subject\" | \"model\";\n}\n\ninterface CategorySearchResultsTreeNode extends BaseSearchResultsTreeNode<CategorySearchResultsTreeNode> {\n type: \"category\";\n modelId: Id64String;\n}\n\ninterface ElementSearchResultsTreeNode extends BaseSearchResultsTreeNode<ElementSearchResultsTreeNode> {\n type: \"element\";\n modelId: Id64String;\n categoryId: Id64String;\n}\n\ntype SearchResultsTreeNode = GenericSearchResultsTreeNode | CategorySearchResultsTreeNode | ElementSearchResultsTreeNode;\n\n/** @internal */\nexport interface ModelsTreeSearchTargets {\n subjectIds?: Id64Set;\n modelIds?: Id64Set;\n categories?: Array<{ modelId: Id64String | undefined; categoryIds: Id64Set }>;\n elements?: Array<{ modelId: Id64String; categoryId: Id64String; elements: Map<ElementId, { isSearchTarget: boolean }> }>;\n}\n\n/** @internal */\nexport async function createModelsSearchResultsTree(props: {\n imodelAccess: ECClassHierarchyInspector;\n searchPaths: HierarchySearchPath[];\n}): Promise<SearchResultsTree<ModelsTreeSearchTargets>> {\n const { imodelAccess, searchPaths } = props;\n return createSearchResultsTree({\n searchResultsNodesHandler: new ModelsTreeSearchResultsNodesHandler({ imodelAccess }),\n searchPaths,\n });\n}\n\ninterface SearchTargetsInternal {\n subjectIds?: Id64Set;\n modelIds?: Id64Set;\n categories?: Map<ModelId, Set<CategoryId>>;\n elements?: Map<ModelCategoryKey, Map<ElementId, { isSearchTarget: boolean }>>;\n}\n\ninterface ModelsTreeSearchResultsNodesHandlerProps {\n imodelAccess: ECClassHierarchyInspector;\n}\n\ntype ModelCategoryKey = `${ModelId}-${CategoryId}`;\n\nclass ModelsTreeSearchResultsNodesHandler extends SearchResultsNodesHandler<void, ModelsTreeSearchTargets, SearchResultsTreeNode> {\n readonly #props: ModelsTreeSearchResultsNodesHandlerProps;\n constructor(props: ModelsTreeSearchResultsNodesHandlerProps) {\n super();\n this.#props = props;\n }\n\n public convertNodesToSearchTargets(searchResultsNodes: SearchResultsTreeNode[]): ModelsTreeSearchTargets | undefined {\n const searchTargets: SearchTargetsInternal = {};\n\n searchResultsNodes.forEach((searchResultsNode) => this.collectSearchTargets(searchTargets, searchResultsNode));\n\n return this.convertInternalSearchTargets(searchTargets);\n }\n\n public async getProcessedSearchResultsNodes(): Promise<void> {}\n\n private convertInternalSearchTargets(searchTargets: SearchTargetsInternal): ModelsTreeSearchTargets | undefined {\n if (!searchTargets.categories && !searchTargets.subjectIds && !searchTargets.elements && !searchTargets.modelIds) {\n return undefined;\n }\n\n return {\n categories: searchTargets.categories\n ? [...searchTargets.categories.entries()].map(([modelId, categoryIds]) => {\n return { modelId, categoryIds };\n })\n : undefined,\n elements: searchTargets.elements\n ? [...searchTargets.elements.entries()].map(([modelCategoryKey, elements]) => {\n const { modelId, categoryId } = this.parseModelCategoryKey(modelCategoryKey);\n return { modelId, categoryId, elements };\n })\n : undefined,\n modelIds: searchTargets.modelIds,\n subjectIds: searchTargets.subjectIds,\n };\n }\n\n private collectSearchTargets(searchTargets: SearchTargetsInternal, searchResultsNode: SearchResultsTreeNode) {\n if (searchResultsNode.isSearchTarget) {\n this.addTarget(searchTargets, searchResultsNode);\n return;\n }\n\n if (searchResultsNode.type === \"element\") {\n // need to add parent ids as search target will be an element\n this.addTarget(searchTargets, searchResultsNode);\n }\n\n if (!searchResultsNode.children) {\n return;\n }\n\n for (const child of searchResultsNode.children.values()) {\n this.collectSearchTargets(searchTargets, child);\n }\n }\n\n private addTarget(searchTargets: SearchTargetsInternal, node: SearchResultsTreeNode) {\n switch (node.type) {\n case \"subject\":\n (searchTargets.subjectIds ??= new Set()).add(node.id);\n return;\n case \"model\":\n (searchTargets.modelIds ??= new Set()).add(node.id);\n return;\n case \"category\":\n const categories = (searchTargets.categories ??= new Map()).get(node.modelId);\n if (categories) {\n categories.add(node.id);\n return;\n }\n searchTargets.categories.set(node.modelId, new Set([node.id]));\n return;\n case \"element\":\n const modelCategoryKey = this.createModelCategoryKey(node.modelId, node.categoryId);\n const elements = (searchTargets.elements ??= new Map()).get(modelCategoryKey);\n if (elements) {\n elements.set(node.id, { isSearchTarget: node.isSearchTarget });\n } else {\n searchTargets.elements.set(modelCategoryKey, new Map([[node.id, { isSearchTarget: node.isSearchTarget }]]));\n }\n }\n }\n\n private createModelCategoryKey(modelId: Id64String, categoryId: Id64String): ModelCategoryKey {\n return `${modelId}-${categoryId}`;\n }\n\n private parseModelCategoryKey(key: ModelCategoryKey): { modelId: Id64String; categoryId: Id64String } {\n const [modelId, categoryId] = key.split(\"-\");\n return { modelId, categoryId };\n }\n\n public createSearchResultsTreeNode({\n type,\n id,\n isSearchTarget,\n parent,\n }: {\n type: SearchResultsTreeNode[\"type\"];\n id: string;\n isSearchTarget: boolean;\n parent: SearchResultsTreeNode | SearchResultsTreeRootNode<SearchResultsTreeNode>;\n }): SearchResultsTreeNode {\n if (type === \"subject\" || type === \"model\") {\n return {\n id,\n isSearchTarget,\n type,\n };\n }\n\n if (type === \"category\") {\n assert(\"type\" in parent && parent.type === \"model\");\n return {\n id,\n isSearchTarget,\n type,\n modelId: parent.id,\n };\n }\n\n if (\"type\" in parent && parent.type === \"category\") {\n return {\n id,\n isSearchTarget,\n type,\n modelId: parent.modelId,\n categoryId: parent.id,\n };\n }\n\n if (\"type\" in parent && parent.type === \"element\") {\n return {\n id,\n isSearchTarget,\n type,\n modelId: parent.modelId,\n categoryId: parent.categoryId,\n };\n }\n\n throw new Error(\"Invalid parent node type\");\n }\n\n public async getType(className: string): Promise<SearchResultsTreeNode[\"type\"]> {\n if (await this.#props.imodelAccess.classDerivesFrom(className, CLASS_NAME_Subject)) {\n return \"subject\";\n }\n if (await this.#props.imodelAccess.classDerivesFrom(className, CLASS_NAME_Model)) {\n return \"model\";\n }\n if (await this.#props.imodelAccess.classDerivesFrom(className, CLASS_NAME_Category)) {\n return \"category\";\n }\n return \"element\";\n }\n}\n"]}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
}
|
|
15
15
|
},
|
|
16
16
|
"loading": {
|
|
17
|
-
"
|
|
17
|
+
"search": "Search in progress",
|
|
18
18
|
"skeleton": "Loading tree"
|
|
19
19
|
},
|
|
20
20
|
"selectableTree": {
|
|
@@ -47,22 +47,22 @@
|
|
|
47
47
|
"tooltip": "Invert"
|
|
48
48
|
}
|
|
49
49
|
},
|
|
50
|
-
"
|
|
50
|
+
"search": {
|
|
51
51
|
"noMatches": "No results were found for your search query.",
|
|
52
52
|
"noMatchesRetry": "Please modify your search and try again.",
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
53
|
+
"unknownSearchError": "An unknown error occurred while searching the tree.",
|
|
54
|
+
"tooManySearchMatches": "There are too many matches for your search query.",
|
|
55
|
+
"tooManySearchMatchesRetry": "Please refine your search and try again."
|
|
56
56
|
}
|
|
57
57
|
},
|
|
58
58
|
"classificationsTree": {
|
|
59
59
|
"label": "Classifications",
|
|
60
|
-
"
|
|
60
|
+
"search": {
|
|
61
61
|
"noMatches": "No results were found for your search query.",
|
|
62
62
|
"noMatchesRetry": "Please modify your search and try again.",
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
63
|
+
"unknownSearchError": "An unknown error occurred while searching the tree.",
|
|
64
|
+
"tooManySearchMatches": "There are too many matches for your search query.",
|
|
65
|
+
"tooManySearchMatchesRetry": "Please refine your search and try again."
|
|
66
66
|
}
|
|
67
67
|
},
|
|
68
68
|
"modelsTree": {
|
|
@@ -100,13 +100,13 @@
|
|
|
100
100
|
"subTree": {
|
|
101
101
|
"unknownSubTreeError": "An unknown error occurred while creating a sub-tree."
|
|
102
102
|
},
|
|
103
|
-
"
|
|
103
|
+
"search": {
|
|
104
104
|
"noMatches": "No results were found for your search query.",
|
|
105
105
|
"noMatchesRetry": "Please modify your search and try again.",
|
|
106
|
-
"
|
|
106
|
+
"unknownSearchError": "An unknown error occurred while searching the tree.",
|
|
107
107
|
"unknownInstanceFocusError": "An unknown error occurred while focusing instances.",
|
|
108
|
-
"
|
|
109
|
-
"
|
|
108
|
+
"tooManySearchMatches": "There are too many matches for your search query.",
|
|
109
|
+
"tooManySearchMatchesRetry": "Please refine your search and try again.",
|
|
110
110
|
"tooManyInstancesFocused": "There are too many elements selected for focus mode.",
|
|
111
111
|
"disableInstanceFocusMode": "Disable the focus mode"
|
|
112
112
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/tree-widget-react",
|
|
3
|
-
"version": "4.0.0-alpha.
|
|
3
|
+
"version": "4.0.0-alpha.23",
|
|
4
4
|
"description": "Tree Widget React",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Bentley",
|
|
@@ -71,10 +71,10 @@
|
|
|
71
71
|
"react-dom": "^18.0.0"
|
|
72
72
|
},
|
|
73
73
|
"dependencies": {
|
|
74
|
-
"@itwin/presentation-core-interop": "^1.4.0-alpha.
|
|
75
|
-
"@itwin/presentation-hierarchies": "^2.0.0-alpha.
|
|
76
|
-
"@itwin/presentation-hierarchies-react": "2.0.0-alpha.
|
|
77
|
-
"@itwin/presentation-shared": "^2.0.0-alpha.
|
|
74
|
+
"@itwin/presentation-core-interop": "^1.4.0-alpha.4",
|
|
75
|
+
"@itwin/presentation-hierarchies": "^2.0.0-alpha.8",
|
|
76
|
+
"@itwin/presentation-hierarchies-react": "2.0.0-alpha.47",
|
|
77
|
+
"@itwin/presentation-shared": "^2.0.0-alpha.5",
|
|
78
78
|
"@itwin/unified-selection": "^1.6.2",
|
|
79
79
|
"classnames": "^2.5.1",
|
|
80
80
|
"react-error-boundary": "^5.0.0",
|
|
@@ -104,9 +104,9 @@
|
|
|
104
104
|
"@itwin/oidc-signin-tool": "^5.0.0",
|
|
105
105
|
"@itwin/presentation-backend": "^5.0.0",
|
|
106
106
|
"@itwin/presentation-common": "^5.0.0",
|
|
107
|
-
"@itwin/presentation-components": "5.12.15
|
|
107
|
+
"@itwin/presentation-components": "^5.12.15",
|
|
108
108
|
"@itwin/presentation-frontend": "^5.0.0",
|
|
109
|
-
"@itwin/presentation-testing": "5.4.11
|
|
109
|
+
"@itwin/presentation-testing": "^5.4.11",
|
|
110
110
|
"@itwin/webgl-compatibility": "^5.0.0",
|
|
111
111
|
"@stratakit/foundations": "^0.4.0",
|
|
112
112
|
"@stratakit/bricks": "^0.5.0",
|
package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UseFilteredPaths.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { firstValueFrom } from \"rxjs\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { HierarchyFilteringPath, HierarchyNodeIdentifier } from \"@itwin/presentation-hierarchies\";\nimport { CLASS_NAME_DefinitionContainer, CLASS_NAME_SubCategory } from \"../../common/internal/ClassNameDefinitions.js\";\nimport { getClassesByView } from \"../../common/internal/Utils.js\";\nimport { FilterLimitExceededError } from \"../../common/TreeErrors.js\";\nimport { useTelemetryContext } from \"../../common/UseTelemetryContext.js\";\nimport { CategoriesTreeDefinition } from \"../CategoriesTreeDefinition.js\";\n\nimport type { GuidString } from \"@itwin/core-bentley\";\nimport type { CategoryInfo } from \"../../common/CategoriesVisibilityUtils.js\";\nimport type { VisibilityTreeProps } from \"../../common/components/VisibilityTree.js\";\nimport type { CategoryId, ElementId, ModelId, SubCategoryId } from \"../../common/internal/Types.js\";\nimport type { CategoriesTreeHierarchyConfiguration } from \"../CategoriesTreeDefinition.js\";\nimport type { CategoriesTreeIdsCache } from \"./CategoriesTreeIdsCache.js\";\n\n/** @internal */\nexport type CategoriesTreeFilteringError = \"tooManyFilterMatches\" | \"unknownFilterError\";\n\ntype HierarchyFilteringPaths = Awaited<ReturnType<Required<VisibilityTreeProps>[\"getFilteredPaths\"]>>;\n\n/** @internal */\nexport function useFilteredPaths({\n filter,\n viewType,\n hierarchyConfiguration,\n getCategoriesTreeIdsCache,\n onCategoriesFiltered,\n onFilteredPathsChanged,\n componentId,\n}: {\n viewType: \"2d\" | \"3d\";\n filter?: string;\n hierarchyConfiguration: CategoriesTreeHierarchyConfiguration;\n getCategoriesTreeIdsCache: () => CategoriesTreeIdsCache;\n onCategoriesFiltered?: (categories: { categories: CategoryInfo[] | undefined; models?: Array<ModelId> }) => void;\n onFilteredPathsChanged: (paths: HierarchyFilteringPaths | undefined) => void;\n componentId: GuidString;\n}): {\n getPaths: VisibilityTreeProps[\"getFilteredPaths\"] | undefined;\n filteringError: CategoriesTreeFilteringError | undefined;\n} {\n const [filteringError, setFilteringError] = useState<CategoriesTreeFilteringError | undefined>();\n const { onFeatureUsed } = useTelemetryContext();\n\n useEffect(() => {\n setFilteringError(undefined);\n onCategoriesFiltered?.({ categories: undefined, models: undefined });\n if (!filter) {\n onFilteredPathsChanged(undefined);\n }\n }, [filter, onCategoriesFiltered, onFilteredPathsChanged]);\n\n const getFilteredPaths = useMemo<VisibilityTreeProps[\"getFilteredPaths\"] | undefined>(() => {\n if (!filter) {\n return undefined;\n }\n\n return async ({ imodelAccess, abortSignal }) => {\n onFeatureUsed({ featureId: \"filtering\", reportInteraction: true });\n try {\n const paths = await CategoriesTreeDefinition.createInstanceKeyPaths({\n imodelAccess,\n abortSignal,\n label: filter,\n viewType,\n idsCache: getCategoriesTreeIdsCache(),\n hierarchyConfig: hierarchyConfiguration,\n componentId,\n });\n onFilteredPathsChanged(paths);\n const { elementClass, modelClass } = getClassesByView(viewType);\n onCategoriesFiltered?.(await getCategoriesFromPaths(paths, getCategoriesTreeIdsCache(), elementClass, modelClass, hierarchyConfiguration));\n return paths;\n } catch (e) {\n const newError = e instanceof FilterLimitExceededError ? \"tooManyFilterMatches\" : \"unknownFilterError\";\n if (newError !== \"tooManyFilterMatches\") {\n const feature = e instanceof Error && e.message.includes(\"query too long to execute or server is too busy\") ? \"error-timeout\" : \"error-unknown\";\n onFeatureUsed({ featureId: feature, reportInteraction: false });\n }\n setFilteringError(newError);\n return [];\n }\n };\n }, [onCategoriesFiltered, filter, onFilteredPathsChanged, onFeatureUsed, viewType, getCategoriesTreeIdsCache, hierarchyConfiguration, componentId]);\n\n return {\n getPaths: getFilteredPaths,\n filteringError,\n };\n}\n\nasync function getCategoriesFromPaths(\n paths: HierarchyFilteringPaths,\n idsCache: CategoriesTreeIdsCache,\n elementClassName: string,\n modelsClassName: string,\n hierarchyConfig: CategoriesTreeHierarchyConfiguration,\n): Promise<{ categories: CategoryInfo[] | undefined; models?: Array<ModelId> }> {\n if (!paths) {\n return { categories: undefined };\n }\n\n const rootFilteredElementIds = new Set<ElementId>();\n const subModelIds = new Set<ModelId>();\n\n const categories = new Map<CategoryId, Array<SubCategoryId>>();\n for (const path of paths) {\n const currPath = HierarchyFilteringPath.normalize(path).path;\n if (currPath.length === 0) {\n continue;\n }\n\n let category: HierarchyNodeIdentifier;\n let subCategory: HierarchyNodeIdentifier | undefined;\n\n let lastNodeInfo: { lastNode: HierarchyNodeIdentifier; nodeIndex: number } | undefined;\n\n for (let i = 0; i < currPath.length; ++i) {\n const currentNode = currPath[i];\n if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(currentNode)) {\n continue;\n }\n if (currentNode.className === elementClassName) {\n rootFilteredElementIds.add(currentNode.id);\n for (let j = i + 1; j < currPath.length; ++j) {\n const childNode = currPath[j];\n if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(childNode)) {\n continue;\n }\n if (childNode.className === modelsClassName) {\n subModelIds.add(childNode.id);\n }\n }\n break;\n }\n lastNodeInfo = { lastNode: currentNode, nodeIndex: i };\n }\n\n assert(lastNodeInfo !== undefined && HierarchyNodeIdentifier.isInstanceNodeIdentifier(lastNodeInfo.lastNode));\n\n if (lastNodeInfo.lastNode.className === CLASS_NAME_DefinitionContainer) {\n const definitionContainerCategories = await firstValueFrom(\n idsCache.getAllContainedCategories({ definitionContainerIds: lastNodeInfo.lastNode.id, includeEmptyCategories: hierarchyConfig.showEmptyCategories }),\n );\n for (const categoryId of definitionContainerCategories) {\n const value = categories.get(categoryId);\n if (value === undefined) {\n categories.set(categoryId, []);\n }\n }\n continue;\n }\n\n if (lastNodeInfo.lastNode.className === CLASS_NAME_SubCategory) {\n const secondToLastNode = lastNodeInfo.nodeIndex > 0 ? currPath[lastNodeInfo.nodeIndex - 1] : undefined;\n assert(secondToLastNode !== undefined && HierarchyNodeIdentifier.isInstanceNodeIdentifier(secondToLastNode));\n\n subCategory = lastNodeInfo.lastNode;\n category = secondToLastNode;\n } else {\n category = lastNodeInfo.lastNode;\n }\n\n let entry = categories.get(category.id);\n if (entry === undefined) {\n entry = [];\n categories.set(category.id, entry);\n }\n\n if (subCategory) {\n entry.push(subCategory.id);\n }\n }\n const rootElementModelMap = await firstValueFrom(idsCache.getFilteredElementsModels(rootFilteredElementIds));\n const models = [...subModelIds, ...new Set(rootElementModelMap.values())];\n return {\n categories: [...categories.entries()].map(([categoryId, subCategoryIds]) => ({\n categoryId,\n subCategoryIds: subCategoryIds.length === 0 ? undefined : subCategoryIds,\n })),\n models,\n };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FilteredTree.js","sourceRoot":"","sources":["../../../../../../../../src/tree-widget-react/components/trees/categories-tree/internal/visibility/FilteredTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { firstValueFrom } from \"rxjs\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { CLASS_NAME_SubCategory } from \"../../../common/internal/ClassNameDefinitions.js\";\nimport { createFilteredTree, FilteredNodesHandler } from \"../../../common/internal/visibility/BaseFilteredTree.js\";\n\nimport type { Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { HierarchyFilteringPath } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector } from \"@itwin/presentation-shared\";\nimport type { CategoryId, ElementId, ModelId, SubCategoryId } from \"../../../common/internal/Types.js\";\nimport type {\n BaseFilteredTreeNode,\n FilteredTree,\n FilteredTreeNodeChildren,\n FilteredTreeRootNode,\n} from \"../../../common/internal/visibility/BaseFilteredTree.js\";\nimport type { CategoriesTreeIdsCache } from \"../CategoriesTreeIdsCache.js\";\n\n/** @internal */\nexport interface CategoriesTreeFilterTargets {\n categories?: Array<{ modelId: Id64String | undefined; categoryIds: Id64Set }>;\n elements?: Array<{ modelId: Id64String; categoryId: Id64String; elements: Map<ElementId, { isFilterTarget: boolean }> }>;\n definitionContainerIds?: Id64Set;\n modelIds?: Id64Set;\n subCategories?: Array<{ categoryId: Id64String; subCategoryIds: Id64Set }>;\n}\n\ninterface CategoryFilteredTreeNode extends BaseFilteredTreeNode<CategoryFilteredTreeNode> {\n type: \"category\";\n modelId?: Id64String;\n}\n\ninterface ModelFilteredTreeNode extends BaseFilteredTreeNode<ModelFilteredTreeNode> {\n type: \"model\";\n categoryId?: Id64String;\n}\ninterface SubCategoryFilteredTreeNode extends BaseFilteredTreeNode<SubCategoryFilteredTreeNode> {\n type: \"subCategory\";\n categoryId: Id64String;\n}\n\ninterface DefinitionContainerFilteredTreeNode extends BaseFilteredTreeNode<DefinitionContainerFilteredTreeNode> {\n type: \"definitionContainer\";\n}\n\ninterface ElementFilteredTreeNode extends BaseFilteredTreeNode<ElementFilteredTreeNode> {\n type: \"element\";\n categoryId: Id64String;\n modelId: Id64String;\n}\n\ntype FilteredTreeNode =\n | DefinitionContainerFilteredTreeNode\n | SubCategoryFilteredTreeNode\n | CategoryFilteredTreeNode\n | ElementFilteredTreeNode\n | ModelFilteredTreeNode;\n\ntype TemporaryElementFilteredNode = Omit<ElementFilteredTreeNode, \"modelId\" | \"children\"> & {\n modelId: string | undefined;\n children?: FilteredTreeNodeChildren<TemporaryElementFilteredNode>;\n};\n\ntype TemporaryFilteredTreeNode =\n | DefinitionContainerFilteredTreeNode\n | SubCategoryFilteredTreeNode\n | CategoryFilteredTreeNode\n | TemporaryElementFilteredNode\n | ModelFilteredTreeNode;\n\n/** @internal */\nexport async function createFilteredCategoriesTree(props: {\n imodelAccess: ECClassHierarchyInspector;\n filteringPaths: HierarchyFilteringPath[];\n categoryClassName: string;\n categoryElementClassName: string;\n categoryModelClassName: string;\n idsCache: CategoriesTreeIdsCache;\n}): Promise<FilteredTree<CategoriesTreeFilterTargets>> {\n const { imodelAccess, filteringPaths, categoryClassName, categoryElementClassName, categoryModelClassName, idsCache } = props;\n return createFilteredTree({\n filteredNodesHandler: new CategoriesTreeFilteredNodesHandler({\n idsCache,\n imodelAccess,\n categoryClassName,\n categoryElementClassName,\n categoryModelClassName,\n }),\n filteringPaths,\n });\n}\n\ninterface FilterTargetsInternal {\n elements?: Map<ModelCategoryKey, Map<ElementId, { isFilterTarget: boolean }>>;\n categories?: Map<ModelId | undefined, Set<CategoryId>>;\n definitionContainerIds?: Id64Set;\n modelIds?: Id64Set;\n subCategories?: Map<CategoryId, Set<SubCategoryId>>;\n}\n\ninterface CategoriesTreeFilteredNodesHandlerProps {\n idsCache: CategoriesTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n categoryClassName: string;\n categoryElementClassName: string;\n categoryModelClassName: string;\n}\n\ntype ModelCategoryKey = `${ModelId}-${CategoryId}`;\n\ninterface ProcessedFilteredNodes {\n filteredElements: Map<Id64String, Omit<ElementFilteredTreeNode, \"children\">>;\n}\n\nclass CategoriesTreeFilteredNodesHandler extends FilteredNodesHandler<ProcessedFilteredNodes, CategoriesTreeFilterTargets, TemporaryFilteredTreeNode> {\n readonly #props: CategoriesTreeFilteredNodesHandlerProps;\n constructor(props: CategoriesTreeFilteredNodesHandlerProps) {\n super();\n this.#props = props;\n }\n\n public async getProcessedFilteredNodes(): Promise<ProcessedFilteredNodes> {\n const filteredTemporaryElements = new Map<Id64String, Omit<TemporaryElementFilteredNode, \"children\">>();\n const result: ProcessedFilteredNodes = {\n filteredElements: new Map(),\n };\n this.filteredNodesArr.forEach((node) => {\n if (node.type === \"element\") {\n filteredTemporaryElements.set(node.id, node);\n }\n });\n\n const filteredElementsModels = await firstValueFrom(this.#props.idsCache.getFilteredElementsModels([...filteredTemporaryElements.keys()]));\n filteredTemporaryElements.forEach((element, id) => {\n const modelId = filteredElementsModels.get(element.id);\n assert(modelId !== undefined);\n result.filteredElements.set(id, { ...element, modelId });\n });\n return result;\n }\n\n public convertNodesToFilterTargets(\n filteredNodes: TemporaryFilteredTreeNode[],\n processedFilteredNodes: ProcessedFilteredNodes,\n ): CategoriesTreeFilterTargets | undefined {\n const filterTargets: FilterTargetsInternal = {};\n\n filteredNodes.forEach((filteredNode) => this.collectFilterTargets(filterTargets, filteredNode, processedFilteredNodes));\n\n return this.convertInternalFilterTargets(filterTargets);\n }\n\n private convertInternalFilterTargets(filterTargets: FilterTargetsInternal): CategoriesTreeFilterTargets | undefined {\n if (\n !filterTargets.categories &&\n !filterTargets.definitionContainerIds &&\n !filterTargets.elements &&\n !filterTargets.modelIds &&\n !filterTargets.subCategories\n ) {\n return undefined;\n }\n return {\n categories: filterTargets.categories\n ? [...filterTargets.categories.entries()].map(([modelId, categoryIds]) => {\n return { modelId, categoryIds };\n })\n : undefined,\n elements: filterTargets.elements\n ? [...filterTargets.elements.entries()].map(([modelCategoryKey, elements]) => {\n const { modelId, categoryId } = this.parseModelCategoryKey(modelCategoryKey);\n return { modelId, categoryId, elements };\n })\n : undefined,\n definitionContainerIds: filterTargets.definitionContainerIds,\n modelIds: filterTargets.modelIds,\n subCategories: filterTargets.subCategories\n ? [...filterTargets.subCategories.entries()].map(([categoryId, subCategoryIds]) => {\n return { categoryId, subCategoryIds };\n })\n : undefined,\n };\n }\n\n private collectFilterTargets(changeTargets: FilterTargetsInternal, node: TemporaryFilteredTreeNode, processedFilteredNodes: ProcessedFilteredNodes) {\n const filteredNode = node.type !== \"element\" ? node : processedFilteredNodes.filteredElements.get(node.id);\n assert(filteredNode !== undefined);\n if (filteredNode.isFilterTarget) {\n this.addTarget(changeTargets, filteredNode);\n return;\n }\n\n if (filteredNode.type === \"element\") {\n // need to add parent ids as filter target will be an element\n this.addTarget(changeTargets, filteredNode);\n }\n\n if (!node.children) {\n return;\n }\n\n for (const child of node.children.values()) {\n this.collectFilterTargets(changeTargets, child, processedFilteredNodes);\n }\n }\n\n private addTarget(filterTargets: FilterTargetsInternal, node: FilteredTreeNode) {\n switch (node.type) {\n case \"definitionContainer\":\n (filterTargets.definitionContainerIds ??= new Set()).add(node.id);\n return;\n case \"model\":\n (filterTargets.modelIds ??= new Set()).add(node.id);\n return;\n case \"subCategory\":\n const subCategories = (filterTargets.subCategories ??= new Map()).get(node.categoryId);\n if (subCategories) {\n subCategories.add(node.id);\n return;\n }\n filterTargets.subCategories.set(node.categoryId, new Set([node.id]));\n return;\n case \"category\":\n const categories = (filterTargets.categories ??= new Map()).get(node.modelId);\n if (!categories) {\n categories.add(node.id);\n return;\n }\n filterTargets.categories.set(node.modelId, new Set([node.id]));\n return;\n case \"element\":\n const modelCategoryKey = this.createModelCategoryKey(node.modelId, node.categoryId);\n const elements = (filterTargets.elements ??= new Map()).get(modelCategoryKey);\n if (elements) {\n elements.set(node.id, { isFilterTarget: node.isFilterTarget });\n } else {\n filterTargets.elements.set(modelCategoryKey, new Map([[node.id, { isFilterTarget: node.isFilterTarget }]]));\n }\n }\n }\n\n private createModelCategoryKey(modelId: Id64String, categoryId: Id64String): ModelCategoryKey {\n return `${modelId}-${categoryId}`;\n }\n\n private parseModelCategoryKey(key: ModelCategoryKey): { modelId: Id64String; categoryId: Id64String } {\n const [modelId, categoryId] = key.split(\"-\");\n return { modelId, categoryId };\n }\n\n public createFilteredTreeNode({\n type,\n id,\n isFilterTarget,\n parent,\n }: {\n type: FilteredTreeNode[\"type\"];\n id: Id64String;\n isFilterTarget: boolean;\n parent: TemporaryFilteredTreeNode | FilteredTreeRootNode<TemporaryFilteredTreeNode>;\n }): TemporaryFilteredTreeNode {\n if (type === \"definitionContainer\") {\n return {\n id,\n isFilterTarget,\n type,\n };\n }\n if (type === \"subCategory\") {\n assert(\"id\" in parent);\n return {\n id,\n isFilterTarget,\n type,\n categoryId: parent.id,\n };\n }\n if (type === \"category\") {\n if (\"type\" in parent && parent.type === \"model\") {\n return {\n id,\n isFilterTarget,\n type,\n modelId: parent.id,\n };\n }\n return {\n id,\n isFilterTarget,\n type,\n };\n }\n if (type === \"model\") {\n assert(\"id\" in parent);\n return {\n id,\n isFilterTarget,\n type,\n categoryId: parent.type === \"category\" ? parent.id : undefined,\n };\n }\n\n if (\"type\" in parent) {\n if (parent.type === \"category\") {\n return {\n id,\n isFilterTarget,\n type,\n categoryId: parent.id,\n modelId: undefined,\n };\n }\n assert(parent.type === \"element\");\n return {\n id,\n isFilterTarget,\n type,\n categoryId: parent.categoryId,\n modelId: undefined,\n };\n }\n\n throw new Error(\"Invalid parent node type\");\n }\n\n public async getType(className: string): Promise<TemporaryFilteredTreeNode[\"type\"]> {\n if (await this.#props.imodelAccess.classDerivesFrom(className, CLASS_NAME_SubCategory)) {\n return \"subCategory\";\n }\n if (await this.#props.imodelAccess.classDerivesFrom(className, this.#props.categoryElementClassName)) {\n return \"element\";\n }\n if (await this.#props.imodelAccess.classDerivesFrom(className, this.#props.categoryClassName)) {\n return \"category\";\n }\n if (await this.#props.imodelAccess.classDerivesFrom(className, this.#props.categoryModelClassName)) {\n return \"model\";\n }\n return \"definitionContainer\";\n }\n}\n"]}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { GuidString } from "@itwin/core-bentley";
|
|
2
|
-
import type { VisibilityTreeProps } from "../../common/components/VisibilityTree.js";
|
|
3
|
-
import type { ClassificationsTreeHierarchyConfiguration } from "../ClassificationsTreeDefinition.js";
|
|
4
|
-
import type { ClassificationsTreeIdsCache } from "./ClassificationsTreeIdsCache.js";
|
|
5
|
-
/** @internal */
|
|
6
|
-
export type ClassificationsTreeFilteringError = "tooManyFilterMatches" | "unknownFilterError";
|
|
7
|
-
type HierarchyFilteringPaths = Awaited<ReturnType<Required<VisibilityTreeProps>["getFilteredPaths"]>>;
|
|
8
|
-
/** @internal */
|
|
9
|
-
export declare function useFilteredPaths({ filter, hierarchyConfiguration, getClassificationsTreeIdsCache, onFilteredPathsChanged, componentId, }: {
|
|
10
|
-
filter?: string;
|
|
11
|
-
hierarchyConfiguration: ClassificationsTreeHierarchyConfiguration;
|
|
12
|
-
getClassificationsTreeIdsCache: () => ClassificationsTreeIdsCache;
|
|
13
|
-
onFilteredPathsChanged: (paths: HierarchyFilteringPaths | undefined) => void;
|
|
14
|
-
componentId: GuidString;
|
|
15
|
-
}): {
|
|
16
|
-
getPaths: VisibilityTreeProps["getFilteredPaths"] | undefined;
|
|
17
|
-
filteringError: ClassificationsTreeFilteringError | undefined;
|
|
18
|
-
};
|
|
19
|
-
export {};
|
|
20
|
-
//# sourceMappingURL=UseFilteredPaths.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UseFilteredPaths.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/classifications-tree/internal/UseFilteredPaths.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAC;AAYpF,gBAAgB;AAChB,MAAM,UAAU,gBAAgB,CAAC,EAC/B,MAAM,EACN,sBAAsB,EACtB,8BAA8B,EAC9B,sBAAsB,EACtB,WAAW,GAOZ;IAIC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,EAAiD,CAAC;IACtG,MAAM,EAAE,aAAa,EAAE,GAAG,mBAAmB,EAAE,CAAC;IAChD,SAAS,CAAC,GAAG,EAAE;QACb,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,sBAAsB,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAErC,MAAM,gBAAgB,GAAG,OAAO,CAAsD,GAAG,EAAE;QACzF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,KAAK,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE;YAC7C,aAAa,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;YACnE,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,6BAA6B,CAAC,sBAAsB,CAAC;oBACvE,YAAY;oBACZ,KAAK,EAAE,MAAM;oBACb,QAAQ,EAAE,8BAA8B,EAAE;oBAC1C,eAAe,EAAE,sBAAsB;oBACvC,WAAW;oBACX,WAAW;iBACZ,CAAC,CAAC;gBACH,sBAAsB,CAAC,KAAK,CAAC,CAAC;gBAC9B,OAAO,KAAK,CAAC;YACf,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,QAAQ,GAAG,CAAC,YAAY,wBAAwB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,oBAAoB,CAAC;gBACvG,IAAI,QAAQ,KAAK,sBAAsB,EAAE,CAAC;oBACxC,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,iDAAiD,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC;oBAChJ,aAAa,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;gBAClE,CAAC;gBACD,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBAC5B,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,sBAAsB,EAAE,aAAa,EAAE,8BAA8B,EAAE,sBAAsB,EAAE,WAAW,CAAC,CAAC,CAAC;IAEzH,OAAO;QACL,QAAQ,EAAE,gBAAgB;QAC1B,cAAc;KACf,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { FilterLimitExceededError } from \"../../common/TreeErrors.js\";\nimport { useTelemetryContext } from \"../../common/UseTelemetryContext.js\";\nimport { ClassificationsTreeDefinition } from \"../ClassificationsTreeDefinition.js\";\n\nimport type { GuidString } from \"@itwin/core-bentley\";\nimport type { VisibilityTreeProps } from \"../../common/components/VisibilityTree.js\";\nimport type { ClassificationsTreeHierarchyConfiguration } from \"../ClassificationsTreeDefinition.js\";\nimport type { ClassificationsTreeIdsCache } from \"./ClassificationsTreeIdsCache.js\";\n\n/** @internal */\nexport type ClassificationsTreeFilteringError = \"tooManyFilterMatches\" | \"unknownFilterError\";\n\ntype HierarchyFilteringPaths = Awaited<ReturnType<Required<VisibilityTreeProps>[\"getFilteredPaths\"]>>;\n\n/** @internal */\nexport function useFilteredPaths({\n filter,\n hierarchyConfiguration,\n getClassificationsTreeIdsCache,\n onFilteredPathsChanged,\n componentId,\n}: {\n filter?: string;\n hierarchyConfiguration: ClassificationsTreeHierarchyConfiguration;\n getClassificationsTreeIdsCache: () => ClassificationsTreeIdsCache;\n onFilteredPathsChanged: (paths: HierarchyFilteringPaths | undefined) => void;\n componentId: GuidString;\n}): {\n getPaths: VisibilityTreeProps[\"getFilteredPaths\"] | undefined;\n filteringError: ClassificationsTreeFilteringError | undefined;\n} {\n const [filteringError, setFilteringError] = useState<ClassificationsTreeFilteringError | undefined>();\n const { onFeatureUsed } = useTelemetryContext();\n useEffect(() => {\n setFilteringError(undefined);\n if (!filter) {\n onFilteredPathsChanged(undefined);\n }\n }, [filter, onFilteredPathsChanged]);\n\n const getFilteredPaths = useMemo<VisibilityTreeProps[\"getFilteredPaths\"] | undefined>(() => {\n if (!filter) {\n return undefined;\n }\n\n return async ({ imodelAccess, abortSignal }) => {\n onFeatureUsed({ featureId: \"filtering\", reportInteraction: true });\n try {\n const paths = await ClassificationsTreeDefinition.createInstanceKeyPaths({\n imodelAccess,\n label: filter,\n idsCache: getClassificationsTreeIdsCache(),\n hierarchyConfig: hierarchyConfiguration,\n componentId,\n abortSignal,\n });\n onFilteredPathsChanged(paths);\n return paths;\n } catch (e) {\n const newError = e instanceof FilterLimitExceededError ? \"tooManyFilterMatches\" : \"unknownFilterError\";\n if (newError !== \"tooManyFilterMatches\") {\n const feature = e instanceof Error && e.message.includes(\"query too long to execute or server is too busy\") ? \"error-timeout\" : \"error-unknown\";\n onFeatureUsed({ featureId: feature, reportInteraction: false });\n }\n setFilteringError(newError);\n return [];\n }\n };\n }, [filter, onFilteredPathsChanged, onFeatureUsed, getClassificationsTreeIdsCache, hierarchyConfiguration, componentId]);\n\n return {\n getPaths: getFilteredPaths,\n filteringError,\n };\n}\n"]}
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
/*---------------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
-
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { firstValueFrom } from "rxjs";
|
|
6
|
-
import { assert } from "@itwin/core-bentley";
|
|
7
|
-
import { CLASS_NAME_Classification, CLASS_NAME_ClassificationTable, CLASS_NAME_GeometricElement2d } from "../../../common/internal/ClassNameDefinitions.js";
|
|
8
|
-
import { createFilteredTree, FilteredNodesHandler } from "../../../common/internal/visibility/BaseFilteredTree.js";
|
|
9
|
-
/** @internal */
|
|
10
|
-
export async function createFilteredClassificationsTree(props) {
|
|
11
|
-
const { imodelAccess, filteringPaths, idsCache } = props;
|
|
12
|
-
return createFilteredTree({
|
|
13
|
-
filteredNodesHandler: new ClassificationsTreeFilteredNodesHandler({ idsCache, imodelAccess }),
|
|
14
|
-
filteringPaths,
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
class ClassificationsTreeFilteredNodesHandler extends FilteredNodesHandler {
|
|
18
|
-
#props;
|
|
19
|
-
constructor(props) {
|
|
20
|
-
super();
|
|
21
|
-
this.#props = props;
|
|
22
|
-
}
|
|
23
|
-
async getProcessedFilteredNodes() {
|
|
24
|
-
const filteredTemporary2dElements = new Map();
|
|
25
|
-
const filteredTemporary3dElements = new Map();
|
|
26
|
-
const result = {
|
|
27
|
-
filtered2dElements: new Map(),
|
|
28
|
-
filtered3dElements: new Map(),
|
|
29
|
-
};
|
|
30
|
-
for (const node of this.filteredNodesArr) {
|
|
31
|
-
if (node.type === "element2d") {
|
|
32
|
-
filteredTemporary2dElements.set(node.id, node);
|
|
33
|
-
}
|
|
34
|
-
else if (node.type === "element3d") {
|
|
35
|
-
filteredTemporary3dElements.set(node.id, node);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
const filteredElementsModels = await firstValueFrom(this.#props.idsCache.getFilteredElementsData({
|
|
39
|
-
element2dIds: [...filteredTemporary2dElements.keys()],
|
|
40
|
-
element3dIds: [...filteredTemporary3dElements.keys()],
|
|
41
|
-
}));
|
|
42
|
-
filteredTemporary2dElements.forEach((element, id) => {
|
|
43
|
-
const entry = filteredElementsModels.get(element.id);
|
|
44
|
-
assert(entry !== undefined);
|
|
45
|
-
result.filtered2dElements.set(id, { ...element, modelId: entry.modelId, categoryId: entry.categoryId });
|
|
46
|
-
});
|
|
47
|
-
filteredTemporary3dElements.forEach((element, id) => {
|
|
48
|
-
const entry = filteredElementsModels.get(element.id);
|
|
49
|
-
assert(entry !== undefined);
|
|
50
|
-
result.filtered3dElements.set(id, { ...element, modelId: entry.modelId, categoryId: entry.categoryId });
|
|
51
|
-
});
|
|
52
|
-
return result;
|
|
53
|
-
}
|
|
54
|
-
convertNodesToFilterTargets(filteredNodes, processedFilteredNodes) {
|
|
55
|
-
const filterTargets = {};
|
|
56
|
-
filteredNodes.forEach((filteredNode) => this.collectFilterTargets(filterTargets, filteredNode, processedFilteredNodes));
|
|
57
|
-
return this.convertInternalFilterTargets(filterTargets);
|
|
58
|
-
}
|
|
59
|
-
convertInternalFilterTargets(filterTargets) {
|
|
60
|
-
if (!filterTargets.classificationIds && !filterTargets.classificationIds && !filterTargets.elements2d && !filterTargets.elements3d) {
|
|
61
|
-
return undefined;
|
|
62
|
-
}
|
|
63
|
-
return {
|
|
64
|
-
classificationIds: filterTargets.classificationIds,
|
|
65
|
-
classificationTableIds: filterTargets.classificationIds,
|
|
66
|
-
elements2d: filterTargets.elements2d
|
|
67
|
-
? [...filterTargets.elements2d?.entries()].map(([modelCategoryKey, elements]) => {
|
|
68
|
-
const { modelId, categoryId } = this.parseModelCategoryKey(modelCategoryKey);
|
|
69
|
-
return { modelId, categoryId, elements };
|
|
70
|
-
})
|
|
71
|
-
: undefined,
|
|
72
|
-
elements3d: filterTargets.elements3d
|
|
73
|
-
? [...filterTargets.elements3d?.entries()].map(([modelCategoryKey, elements]) => {
|
|
74
|
-
const { modelId, categoryId } = this.parseModelCategoryKey(modelCategoryKey);
|
|
75
|
-
return { modelId, categoryId, elements };
|
|
76
|
-
})
|
|
77
|
-
: undefined,
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
collectFilterTargets(changeTargets, node, processedFilteredNodes) {
|
|
81
|
-
const filteredNode = node.type === "element2d"
|
|
82
|
-
? processedFilteredNodes.filtered2dElements.get(node.id)
|
|
83
|
-
: node.type === "element3d"
|
|
84
|
-
? processedFilteredNodes.filtered3dElements.get(node.id)
|
|
85
|
-
: node;
|
|
86
|
-
assert(filteredNode !== undefined);
|
|
87
|
-
if (filteredNode.isFilterTarget) {
|
|
88
|
-
this.addTarget(changeTargets, filteredNode);
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
if (filteredNode.type === "element2d" || filteredNode.type === "element3d") {
|
|
92
|
-
// need to add parent ids as filter target will be an element
|
|
93
|
-
this.addTarget(changeTargets, filteredNode);
|
|
94
|
-
}
|
|
95
|
-
if (!node.children) {
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
for (const child of node.children.values()) {
|
|
99
|
-
this.collectFilterTargets(changeTargets, child, processedFilteredNodes);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
addTarget(filterTargets, node) {
|
|
103
|
-
switch (node.type) {
|
|
104
|
-
case "classificationTable":
|
|
105
|
-
(filterTargets.classificationTableIds ??= new Set()).add(node.id);
|
|
106
|
-
return;
|
|
107
|
-
case "classification":
|
|
108
|
-
(filterTargets.classificationIds ??= new Set()).add(node.id);
|
|
109
|
-
return;
|
|
110
|
-
case "element2d":
|
|
111
|
-
const element2dKey = this.createModelCategoryKey(node.modelId, node.categoryId);
|
|
112
|
-
const elements2d = (filterTargets.elements2d ??= new Map()).get(element2dKey);
|
|
113
|
-
if (elements2d) {
|
|
114
|
-
elements2d.set(node.id, { isFilterTarget: node.isFilterTarget });
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
filterTargets.elements2d.set(element2dKey, new Map([[node.id, { isFilterTarget: node.isFilterTarget }]]));
|
|
118
|
-
}
|
|
119
|
-
return;
|
|
120
|
-
case "element3d":
|
|
121
|
-
const element3dKey = this.createModelCategoryKey(node.modelId, node.categoryId);
|
|
122
|
-
const elements3d = (filterTargets.elements3d ??= new Map()).get(element3dKey);
|
|
123
|
-
if (elements3d) {
|
|
124
|
-
elements3d.set(node.id, { isFilterTarget: node.isFilterTarget });
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
filterTargets.elements3d.set(element3dKey, new Map([[node.id, { isFilterTarget: node.isFilterTarget }]]));
|
|
128
|
-
}
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
createModelCategoryKey(modelId, categoryId) {
|
|
133
|
-
return `${modelId}-${categoryId}`;
|
|
134
|
-
}
|
|
135
|
-
parseModelCategoryKey(key) {
|
|
136
|
-
const [modelId, categoryId] = key.split("-");
|
|
137
|
-
return { modelId, categoryId };
|
|
138
|
-
}
|
|
139
|
-
createFilteredTreeNode({ type, id, isFilterTarget, }) {
|
|
140
|
-
if (type === "element2d" || type === "element3d") {
|
|
141
|
-
return {
|
|
142
|
-
id,
|
|
143
|
-
isFilterTarget,
|
|
144
|
-
type,
|
|
145
|
-
modelId: undefined,
|
|
146
|
-
categoryId: undefined,
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
return {
|
|
150
|
-
id,
|
|
151
|
-
isFilterTarget,
|
|
152
|
-
type,
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
async getType(className) {
|
|
156
|
-
if (await this.#props.imodelAccess.classDerivesFrom(className, CLASS_NAME_ClassificationTable)) {
|
|
157
|
-
return "classificationTable";
|
|
158
|
-
}
|
|
159
|
-
if (await this.#props.imodelAccess.classDerivesFrom(className, CLASS_NAME_Classification)) {
|
|
160
|
-
return "classification";
|
|
161
|
-
}
|
|
162
|
-
if (await this.#props.imodelAccess.classDerivesFrom(className, CLASS_NAME_GeometricElement2d)) {
|
|
163
|
-
return "element2d";
|
|
164
|
-
}
|
|
165
|
-
return "element3d";
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
//# sourceMappingURL=FilteredTree.js.map
|