@itwin/tree-widget-react 4.0.0-alpha.22 → 4.0.0-alpha.24

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.
Files changed (161) hide show
  1. package/README.md +48 -37
  2. package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.d.ts +1 -1
  3. package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.js +1 -1
  4. package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.js.map +1 -1
  5. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.d.ts +3 -3
  6. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js +5 -4
  7. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js.map +1 -1
  8. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js +43 -18
  9. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -1
  10. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.d.ts +2 -2
  11. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js +3 -3
  12. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -1
  13. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +2 -2
  14. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +14 -13
  15. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js.map +1 -1
  16. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.d.ts +6 -5
  17. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +32 -33
  18. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js.map +1 -1
  19. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.d.ts +2 -2
  20. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +31 -46
  21. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js.map +1 -1
  22. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/{UseFilteredPaths.d.ts → UseSearchPaths.d.ts} +8 -8
  23. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/{UseFilteredPaths.js → UseSearchPaths.js} +21 -21
  24. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseSearchPaths.js.map +1 -0
  25. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.d.ts +7 -7
  26. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.js +13 -13
  27. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.js.map +1 -1
  28. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.js +2 -2
  29. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.js.map +1 -1
  30. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/{FilteredTree.d.ts → SearchResultsTree.d.ts} +8 -8
  31. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/{FilteredTree.js → SearchResultsTree.js} +62 -62
  32. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/SearchResultsTree.js.map +1 -0
  33. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.d.ts +3 -3
  34. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.js +5 -4
  35. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.js.map +1 -1
  36. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.d.ts +1 -1
  37. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js +2 -2
  38. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js.map +1 -1
  39. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.d.ts +2 -2
  40. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js +10 -9
  41. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js.map +1 -1
  42. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.d.ts +6 -5
  43. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js +30 -29
  44. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js.map +1 -1
  45. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.d.ts +4 -4
  46. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.js +2 -2
  47. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.js.map +1 -1
  48. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.d.ts +4 -1
  49. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js +41 -5
  50. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js.map +1 -1
  51. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseSearchPaths.d.ts +20 -0
  52. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/{UseFilteredPaths.js → UseSearchPaths.js} +19 -19
  53. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseSearchPaths.js.map +1 -0
  54. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.d.ts +4 -4
  55. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.js +8 -8
  56. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.js.map +1 -1
  57. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/{FilteredTree.d.ts → SearchResultsTree.d.ts} +9 -9
  58. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/SearchResultsTree.js +168 -0
  59. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/SearchResultsTree.js.map +1 -0
  60. package/lib/esm/tree-widget-react/components/trees/common/TreeErrors.d.ts +2 -2
  61. package/lib/esm/tree-widget-react/components/trees/common/TreeErrors.js +3 -3
  62. package/lib/esm/tree-widget-react/components/trees/common/TreeErrors.js.map +1 -1
  63. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js +14 -4
  64. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
  65. package/lib/esm/tree-widget-react/components/trees/common/UseTelemetryContext.d.ts +1 -1
  66. package/lib/esm/tree-widget-react/components/trees/common/UseTelemetryContext.js.map +1 -1
  67. package/lib/esm/tree-widget-react/components/trees/common/Utils.d.ts +3 -3
  68. package/lib/esm/tree-widget-react/components/trees/common/Utils.js +20 -20
  69. package/lib/esm/tree-widget-react/components/trees/common/Utils.js.map +1 -1
  70. package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.css +1 -1
  71. package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.d.ts +6 -6
  72. package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.js +11 -11
  73. package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.js.map +1 -1
  74. package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.js +1 -1
  75. package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.js.map +1 -1
  76. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.d.ts +9 -3
  77. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js +5 -3
  78. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js.map +1 -1
  79. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.d.ts +4 -4
  80. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js +5 -8
  81. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js.map +1 -1
  82. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.d.ts +4 -3
  83. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js +5 -8
  84. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js.map +1 -1
  85. package/lib/esm/tree-widget-react/components/trees/common/internal/AlwaysAndNeverDrawnElementInfo.js +2 -1
  86. package/lib/esm/tree-widget-react/components/trees/common/internal/AlwaysAndNeverDrawnElementInfo.js.map +1 -1
  87. package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js +2 -1
  88. package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js.map +1 -1
  89. package/lib/esm/tree-widget-react/components/trees/common/internal/UseErrorState.d.ts +15 -0
  90. package/lib/esm/tree-widget-react/components/trees/common/internal/UseErrorState.js +37 -0
  91. package/lib/esm/tree-widget-react/components/trees/common/internal/UseErrorState.js.map +1 -0
  92. package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.d.ts +21 -5
  93. package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js +24 -8
  94. package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js.map +1 -1
  95. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.d.ts +1 -6
  96. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js +20 -17
  97. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js.map +1 -1
  98. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.d.ts +18 -18
  99. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.js +32 -32
  100. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.js.map +1 -1
  101. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseSearchResultsTree.d.ts +91 -0
  102. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseSearchResultsTree.js +112 -0
  103. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseSearchResultsTree.js.map +1 -0
  104. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.d.ts +6 -10
  105. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.js +27 -15
  106. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.js.map +1 -1
  107. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +3 -3
  108. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js +5 -2
  109. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
  110. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +1 -1
  111. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
  112. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.d.ts +3 -3
  113. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js +5 -2
  114. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
  115. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.d.ts +1 -1
  116. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
  117. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js +65 -43
  118. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js.map +1 -1
  119. package/lib/esm/tree-widget-react/components/trees/index.d.ts +1 -1
  120. package/lib/esm/tree-widget-react/components/trees/index.js +1 -1
  121. package/lib/esm/tree-widget-react/components/trees/index.js.map +1 -1
  122. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.d.ts +3 -3
  123. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js +6 -5
  124. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js.map +1 -1
  125. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js +1 -1
  126. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js.map +1 -1
  127. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.d.ts +1 -1
  128. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js +5 -5
  129. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  130. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.d.ts +2 -2
  131. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +15 -14
  132. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
  133. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.d.ts +32 -31
  134. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js +32 -31
  135. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js.map +1 -1
  136. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +4 -1
  137. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +41 -5
  138. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -1
  139. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseSearchPaths.d.ts +41 -0
  140. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/{UseFilteredPaths.js → UseSearchPaths.js} +47 -47
  141. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseSearchPaths.js.map +1 -0
  142. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.d.ts +7 -7
  143. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.js +13 -13
  144. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.js.map +1 -1
  145. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/{FilteredTree.d.ts → SearchResultsTree.d.ts} +8 -8
  146. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/{FilteredTree.js → SearchResultsTree.js} +43 -43
  147. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/SearchResultsTree.js.map +1 -0
  148. package/lib/public/locales/en/TreeWidget.json +13 -13
  149. package/package.json +7 -7
  150. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js.map +0 -1
  151. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/FilteredTree.js.map +0 -1
  152. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseFilteredPaths.d.ts +0 -20
  153. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseFilteredPaths.js.map +0 -1
  154. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/FilteredTree.js +0 -168
  155. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/FilteredTree.js.map +0 -1
  156. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseFilteredTree.d.ts +0 -91
  157. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseFilteredTree.js +0 -112
  158. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseFilteredTree.js.map +0 -1
  159. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.d.ts +0 -41
  160. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js.map +0 -1
  161. 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 { createFilteredTree, FilteredNodesHandler } from "../../../common/internal/visibility/BaseFilteredTree.js";
7
+ import { createSearchResultsTree, SearchResultsNodesHandler } from "../../../common/internal/visibility/BaseSearchResultsTree.js";
8
8
  /** @internal */
9
- export async function createFilteredModelsTree(props) {
10
- const { imodelAccess, filteringPaths } = props;
11
- return createFilteredTree({
12
- filteredNodesHandler: new ModelsTreeFilteredNodesHandler({ imodelAccess }),
13
- filteringPaths,
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 ModelsTreeFilteredNodesHandler extends FilteredNodesHandler {
16
+ class ModelsTreeSearchResultsNodesHandler extends SearchResultsNodesHandler {
17
17
  #props;
18
18
  constructor(props) {
19
19
  super();
20
20
  this.#props = props;
21
21
  }
22
- convertNodesToFilterTargets(filteredNodes) {
23
- const filterTargets = {};
24
- filteredNodes.forEach((filteredNode) => this.collectFilterTargets(filterTargets, filteredNode));
25
- return this.convertInternalFilterTargets(filterTargets);
22
+ convertNodesToSearchTargets(searchResultsNodes) {
23
+ const searchTargets = {};
24
+ searchResultsNodes.forEach((searchResultsNode) => this.collectSearchTargets(searchTargets, searchResultsNode));
25
+ return this.convertInternalSearchTargets(searchTargets);
26
26
  }
27
- async getProcessedFilteredNodes() { }
28
- convertInternalFilterTargets(filterTargets) {
29
- if (!filterTargets.categories && !filterTargets.subjectIds && !filterTargets.elements && !filterTargets.modelIds) {
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: filterTargets.categories
34
- ? [...filterTargets.categories.entries()].map(([modelId, categoryIds]) => {
33
+ categories: searchTargets.categories
34
+ ? [...searchTargets.categories.entries()].map(([modelId, categoryIds]) => {
35
35
  return { modelId, categoryIds };
36
36
  })
37
37
  : undefined,
38
- elements: filterTargets.elements
39
- ? [...filterTargets.elements.entries()].map(([modelCategoryKey, elements]) => {
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: filterTargets.modelIds,
45
- subjectIds: filterTargets.subjectIds,
44
+ modelIds: searchTargets.modelIds,
45
+ subjectIds: searchTargets.subjectIds,
46
46
  };
47
47
  }
48
- collectFilterTargets(changeTargets, filteredNode) {
49
- if (filteredNode.isFilterTarget) {
50
- this.addTarget(changeTargets, filteredNode);
48
+ collectSearchTargets(searchTargets, searchResultsNode) {
49
+ if (searchResultsNode.isSearchTarget) {
50
+ this.addTarget(searchTargets, searchResultsNode);
51
51
  return;
52
52
  }
53
- if (filteredNode.type === "element") {
54
- // need to add parent ids as filter target will be an element
55
- this.addTarget(changeTargets, filteredNode);
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 (!filteredNode.children) {
57
+ if (!searchResultsNode.children) {
58
58
  return;
59
59
  }
60
- for (const child of filteredNode.children.values()) {
61
- this.collectFilterTargets(changeTargets, child);
60
+ for (const child of searchResultsNode.children.values()) {
61
+ this.collectSearchTargets(searchTargets, child);
62
62
  }
63
63
  }
64
- addTarget(filterTargets, node) {
64
+ addTarget(searchTargets, node) {
65
65
  switch (node.type) {
66
66
  case "subject":
67
- (filterTargets.subjectIds ??= new Set()).add(node.id);
67
+ (searchTargets.subjectIds ??= new Set()).add(node.id);
68
68
  return;
69
69
  case "model":
70
- (filterTargets.modelIds ??= new Set()).add(node.id);
70
+ (searchTargets.modelIds ??= new Set()).add(node.id);
71
71
  return;
72
72
  case "category":
73
- const categories = (filterTargets.categories ??= new Map()).get(node.modelId);
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
- filterTargets.categories.set(node.modelId, new Set([node.id]));
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 = (filterTargets.elements ??= new Map()).get(modelCategoryKey);
82
+ const elements = (searchTargets.elements ??= new Map()).get(modelCategoryKey);
83
83
  if (elements) {
84
- elements.set(node.id, { isFilterTarget: node.isFilterTarget });
84
+ elements.set(node.id, { isSearchTarget: node.isSearchTarget });
85
85
  }
86
86
  else {
87
- filterTargets.elements.set(modelCategoryKey, new Map([[node.id, { isFilterTarget: node.isFilterTarget }]]));
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
- createFilteredTreeNode({ type, id, isFilterTarget, parent, }) {
98
+ createSearchResultsTreeNode({ type, id, isSearchTarget, parent, }) {
99
99
  if (type === "subject" || type === "model") {
100
100
  return {
101
101
  id,
102
- isFilterTarget,
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
- isFilterTarget,
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
- isFilterTarget,
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
- isFilterTarget,
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=FilteredTree.js.map
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
- "filter": "Filtering in progress",
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
- "filtering": {
50
+ "search": {
51
51
  "noMatches": "No results were found for your search query.",
52
52
  "noMatchesRetry": "Please modify your search and try again.",
53
- "unknownFilterError": "An unknown error occurred while filtering the tree.",
54
- "tooManyFilterMatches": "There are too many matches for your search query.",
55
- "tooManyFilterMatchesRetry": "Please refine your search and try again."
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
- "filtering": {
60
+ "search": {
61
61
  "noMatches": "No results were found for your search query.",
62
62
  "noMatchesRetry": "Please modify your search and try again.",
63
- "unknownFilterError": "An unknown error occurred while filtering the tree.",
64
- "tooManyFilterMatches": "There are too many matches for your search query.",
65
- "tooManyFilterMatchesRetry": "Please refine your search and try again."
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
- "filtering": {
103
+ "search": {
104
104
  "noMatches": "No results were found for your search query.",
105
105
  "noMatchesRetry": "Please modify your search and try again.",
106
- "unknownFilterError": "An unknown error occurred while filtering the tree.",
106
+ "unknownSearchError": "An unknown error occurred while searching the tree.",
107
107
  "unknownInstanceFocusError": "An unknown error occurred while focusing instances.",
108
- "tooManyFilterMatches": "There are too many matches for your search query.",
109
- "tooManyFilterMatchesRetry": "Please refine your search and try again.",
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.22",
3
+ "version": "4.0.0-alpha.24",
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.3",
75
- "@itwin/presentation-hierarchies": "^2.0.0-alpha.6",
76
- "@itwin/presentation-hierarchies-react": "2.0.0-alpha.44",
77
- "@itwin/presentation-shared": "^2.0.0-alpha.4",
74
+ "@itwin/presentation-core-interop": "^1.4.0-alpha.4",
75
+ "@itwin/presentation-hierarchies": "^2.0.0-alpha.9",
76
+ "@itwin/presentation-hierarchies-react": "2.0.0-alpha.48",
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-alpha.0",
107
+ "@itwin/presentation-components": "^5.12.15",
108
108
  "@itwin/presentation-frontend": "^5.0.0",
109
- "@itwin/presentation-testing": "5.4.11-alpha.0",
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",
@@ -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