@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,28 +4,28 @@
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import { useEffect, useMemo, useState } from "react";
6
6
  import { firstValueFrom } from "rxjs";
7
- import { HierarchyFilteringPath, HierarchyNodeIdentifier, HierarchyNodeKey } from "@itwin/presentation-hierarchies";
7
+ import { HierarchyNodeIdentifier, HierarchyNodeKey, HierarchySearchPath } from "@itwin/presentation-hierarchies";
8
8
  import { useFocusedInstancesContext } from "../../common/FocusedInstancesContext.js";
9
9
  import { CLASS_NAME_GeometricModel3d, CLASS_NAME_Subject } from "../../common/internal/ClassNameDefinitions.js";
10
- import { FilterLimitExceededError } from "../../common/TreeErrors.js";
10
+ import { SearchLimitExceededError } from "../../common/TreeErrors.js";
11
11
  import { useTelemetryContext } from "../../common/UseTelemetryContext.js";
12
- import { joinHierarchyFilteringPaths } from "../../common/Utils.js";
12
+ import { joinHierarchySearchPaths } from "../../common/Utils.js";
13
13
  import { ModelsTreeDefinition } from "../ModelsTreeDefinition.js";
14
14
  /** @internal */
15
- export function useFilteredPaths({ hierarchyConfiguration, filter, getFilteredPaths, getSubTreePaths, getModelsTreeIdsCache, onModelsFiltered, onFilteredPathsChanged, componentId, }) {
16
- const [filteringError, setFilteringError] = useState(undefined);
15
+ export function useSearchPaths({ hierarchyConfiguration, searchText, getSearchPaths, getSubTreePaths, getModelsTreeIdsCache, onModelsFiltered, onSearchPathsChanged, componentId, }) {
16
+ const [searchError, setSearchError] = useState(undefined);
17
17
  const [subTreeError, setSubTreeError] = useState(undefined);
18
18
  const { onFeatureUsed } = useTelemetryContext();
19
19
  const { loadFocusedItems } = useFocusedInstancesContext();
20
20
  useEffect(() => {
21
- setFilteringError(undefined);
21
+ setSearchError(undefined);
22
22
  setSubTreeError(undefined);
23
23
  onModelsFiltered?.(undefined);
24
- // reset filtered paths if there is no filters applied. This allows to keep current filtered paths until new paths are loaded.
25
- if (!loadFocusedItems && !getFilteredPaths && !filter && !getSubTreePaths) {
26
- onFilteredPathsChanged(undefined);
24
+ // reset search paths if there is no search applied. This allows to keep current search paths until new paths are loaded.
25
+ if (!loadFocusedItems && !getSearchPaths && !searchText && !getSubTreePaths) {
26
+ onSearchPathsChanged(undefined);
27
27
  }
28
- }, [loadFocusedItems, getFilteredPaths, getSubTreePaths, filter, onModelsFiltered, onFilteredPathsChanged]);
28
+ }, [loadFocusedItems, getSearchPaths, getSubTreePaths, searchText, onModelsFiltered, onSearchPathsChanged]);
29
29
  const getSubTreePathsInternal = useMemo(() => {
30
30
  if (!getSubTreePaths) {
31
31
  return undefined;
@@ -43,7 +43,7 @@ export function useFilteredPaths({ hierarchyConfiguration, filter, getFilteredPa
43
43
  componentId: `${componentId}/subTree`,
44
44
  }),
45
45
  });
46
- return paths.map(HierarchyFilteringPath.normalize).map(({ path }) => path);
46
+ return paths.map(HierarchySearchPath.normalize).map(({ path }) => path);
47
47
  }
48
48
  catch {
49
49
  const newError = "unknownSubTreeError";
@@ -53,20 +53,20 @@ export function useFilteredPaths({ hierarchyConfiguration, filter, getFilteredPa
53
53
  };
54
54
  }, [getModelsTreeIdsCache, hierarchyConfiguration, getSubTreePaths, componentId]);
55
55
  const getPaths = useMemo(() => {
56
- const handlePaths = async (filteredPaths, classInspector) => {
57
- onFilteredPathsChanged(filteredPaths);
56
+ const handlePaths = async (searchPaths, classInspector) => {
57
+ onSearchPathsChanged(searchPaths);
58
58
  if (!onModelsFiltered) {
59
59
  return;
60
60
  }
61
- const modelIds = filteredPaths ? await getModels(filteredPaths, getModelsTreeIdsCache(), classInspector) : undefined;
61
+ const modelIds = searchPaths ? await getModels(searchPaths, getModelsTreeIdsCache(), classInspector) : undefined;
62
62
  onModelsFiltered(modelIds);
63
63
  };
64
64
  if (loadFocusedItems) {
65
65
  return async ({ imodelAccess, abortSignal }) => {
66
66
  try {
67
67
  const focusedItems = await collectFocusedItems(loadFocusedItems);
68
- return await createFilteringPathsResult({
69
- getFilteringPaths: async () => {
68
+ return await createSearchPathsResult({
69
+ getSearchPaths: async () => {
70
70
  const paths = await ModelsTreeDefinition.createInstanceKeyPaths({
71
71
  imodelAccess,
72
72
  idsCache: getModelsTreeIdsCache(),
@@ -82,22 +82,22 @@ export function useFilteredPaths({ hierarchyConfiguration, filter, getFilteredPa
82
82
  });
83
83
  }
84
84
  catch (e) {
85
- const newError = e instanceof FilterLimitExceededError ? "tooManyInstancesFocused" : "unknownInstanceFocusError";
85
+ const newError = e instanceof SearchLimitExceededError ? "tooManyInstancesFocused" : "unknownInstanceFocusError";
86
86
  if (newError !== "tooManyInstancesFocused") {
87
87
  const feature = e instanceof Error && e.message.includes("query too long to execute or server is too busy") ? "error-timeout" : "error-unknown";
88
88
  onFeatureUsed({ featureId: feature, reportInteraction: false });
89
89
  }
90
- setFilteringError(newError);
90
+ setSearchError(newError);
91
91
  return [];
92
92
  }
93
93
  };
94
94
  }
95
- if (getFilteredPaths) {
95
+ if (getSearchPaths) {
96
96
  return async ({ imodelAccess, abortSignal }) => {
97
97
  try {
98
- return await createFilteringPathsResult({
99
- getFilteringPaths: async () => {
100
- const paths = await getFilteredPaths({
98
+ return await createSearchPathsResult({
99
+ getSearchPaths: async () => {
100
+ const paths = await getSearchPaths({
101
101
  createInstanceKeyPaths: async (props) => ModelsTreeDefinition.createInstanceKeyPaths({
102
102
  ...props,
103
103
  imodelAccess,
@@ -107,34 +107,34 @@ export function useFilteredPaths({ hierarchyConfiguration, filter, getFilteredPa
107
107
  abortSignal,
108
108
  componentId,
109
109
  }),
110
- filter,
110
+ searchText,
111
111
  });
112
- return paths?.map(HierarchyFilteringPath.normalize);
112
+ return paths?.map(HierarchySearchPath.normalize);
113
113
  },
114
114
  getSubTreePaths: async () => (getSubTreePathsInternal ? getSubTreePathsInternal({ imodelAccess, abortSignal }) : undefined),
115
115
  handlePaths: async (paths) => handlePaths(paths, imodelAccess),
116
116
  });
117
117
  }
118
118
  catch (e) {
119
- const newError = e instanceof FilterLimitExceededError ? "tooManyFilterMatches" : "unknownFilterError";
120
- if (newError !== "tooManyFilterMatches") {
119
+ const newError = e instanceof SearchLimitExceededError ? "tooManySearchMatches" : "unknownSearchError";
120
+ if (newError !== "tooManySearchMatches") {
121
121
  const feature = e instanceof Error && e.message.includes("query too long to execute or server is too busy") ? "error-timeout" : "error-unknown";
122
122
  onFeatureUsed({ featureId: feature, reportInteraction: false });
123
123
  }
124
- setFilteringError(newError);
124
+ setSearchError(newError);
125
125
  return [];
126
126
  }
127
127
  };
128
128
  }
129
- if (filter) {
129
+ if (searchText) {
130
130
  return async ({ imodelAccess, abortSignal }) => {
131
- onFeatureUsed({ featureId: "filtering", reportInteraction: true });
131
+ onFeatureUsed({ featureId: "search", reportInteraction: true });
132
132
  try {
133
- return await createFilteringPathsResult({
134
- getFilteringPaths: async () => {
133
+ return await createSearchPathsResult({
134
+ getSearchPaths: async () => {
135
135
  const paths = await ModelsTreeDefinition.createInstanceKeyPaths({
136
136
  imodelAccess,
137
- label: filter,
137
+ label: searchText,
138
138
  idsCache: getModelsTreeIdsCache(),
139
139
  hierarchyConfig: hierarchyConfiguration,
140
140
  abortSignal,
@@ -147,32 +147,32 @@ export function useFilteredPaths({ hierarchyConfiguration, filter, getFilteredPa
147
147
  });
148
148
  }
149
149
  catch (e) {
150
- const newError = e instanceof FilterLimitExceededError ? "tooManyFilterMatches" : "unknownFilterError";
151
- if (newError !== "tooManyFilterMatches") {
150
+ const newError = e instanceof SearchLimitExceededError ? "tooManySearchMatches" : "unknownSearchError";
151
+ if (newError !== "tooManySearchMatches") {
152
152
  const feature = e instanceof Error && e.message.includes("query too long to execute or server is too busy") ? "error-timeout" : "error-unknown";
153
153
  onFeatureUsed({ featureId: feature, reportInteraction: false });
154
154
  }
155
- setFilteringError(newError);
155
+ setSearchError(newError);
156
156
  return [];
157
157
  }
158
158
  };
159
159
  }
160
160
  return getSubTreePathsInternal;
161
161
  }, [
162
- filter,
162
+ searchText,
163
163
  loadFocusedItems,
164
164
  getModelsTreeIdsCache,
165
165
  onFeatureUsed,
166
- getFilteredPaths,
166
+ getSearchPaths,
167
167
  hierarchyConfiguration,
168
168
  onModelsFiltered,
169
- onFilteredPathsChanged,
169
+ onSearchPathsChanged,
170
170
  getSubTreePathsInternal,
171
171
  componentId,
172
172
  ]);
173
173
  return {
174
174
  getPaths,
175
- filteringError,
175
+ searchError,
176
176
  subTreeError,
177
177
  };
178
178
  }
@@ -194,7 +194,7 @@ async function getModels(paths, idsCache, classInspector) {
194
194
  targetSubjectIds.add(currStep.id);
195
195
  break;
196
196
  }
197
- // collect all the models from the filtered path
197
+ // collect all the models from the search path
198
198
  if (await classInspector.classDerivesFrom(currStep.className, CLASS_NAME_GeometricModel3d)) {
199
199
  targetModelIds.add(currStep.id);
200
200
  }
@@ -231,18 +231,18 @@ async function collectFocusedItems(loadFocusedItems) {
231
231
  })));
232
232
  return focusedItems;
233
233
  }
234
- async function createFilteringPathsResult({ getSubTreePaths, getFilteringPaths, handlePaths, }) {
235
- const [subTreePaths, filterPaths] = await Promise.all([getSubTreePaths(), getFilteringPaths()]);
234
+ async function createSearchPathsResult({ getSubTreePaths, getSearchPaths, handlePaths, }) {
235
+ const [subTreePaths, searchPaths] = await Promise.all([getSubTreePaths(), getSearchPaths()]);
236
236
  let joinedPaths;
237
237
  try {
238
- if (subTreePaths && filterPaths) {
239
- return (joinedPaths = joinHierarchyFilteringPaths(subTreePaths, filterPaths));
238
+ if (subTreePaths && searchPaths) {
239
+ return (joinedPaths = joinHierarchySearchPaths(subTreePaths, searchPaths));
240
240
  }
241
241
  if (subTreePaths) {
242
242
  return (joinedPaths = subTreePaths);
243
243
  }
244
- if (filterPaths) {
245
- return (joinedPaths = filterPaths);
244
+ if (searchPaths) {
245
+ return (joinedPaths = searchPaths);
246
246
  }
247
247
  }
248
248
  finally {
@@ -250,4 +250,4 @@ async function createFilteringPathsResult({ getSubTreePaths, getFilteringPaths,
250
250
  }
251
251
  return joinedPaths;
252
252
  }
253
- //# sourceMappingURL=UseFilteredPaths.js.map
253
+ //# sourceMappingURL=UseSearchPaths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UseSearchPaths.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/models-tree/internal/UseSearchPaths.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 { HierarchyNodeIdentifier, HierarchyNodeKey, HierarchySearchPath } from \"@itwin/presentation-hierarchies\";\nimport { useFocusedInstancesContext } from \"../../common/FocusedInstancesContext.js\";\nimport { CLASS_NAME_GeometricModel3d, CLASS_NAME_Subject } from \"../../common/internal/ClassNameDefinitions.js\";\nimport { SearchLimitExceededError } from \"../../common/TreeErrors.js\";\nimport { useTelemetryContext } from \"../../common/UseTelemetryContext.js\";\nimport { joinHierarchySearchPaths } from \"../../common/Utils.js\";\nimport { ModelsTreeDefinition } from \"../ModelsTreeDefinition.js\";\n\nimport type { GuidString, Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport type { GroupingHierarchyNode, HierarchyNodeIdentifiersPath, InstancesNodeKey } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector, InstanceKey } from \"@itwin/presentation-shared\";\nimport type { VisibilityTreeProps } from \"../../common/components/VisibilityTree.js\";\nimport type { NormalizedHierarchySearchPath } from \"../../common/Utils.js\";\nimport type { ClassGroupingHierarchyNode, ElementsGroupInfo, ModelsTreeHierarchyConfiguration } from \"../ModelsTreeDefinition.js\";\nimport type { ModelsTreeIdsCache } from \"./ModelsTreeIdsCache.js\";\n\n/** @internal */\nexport type ModelsTreeSearchError = \"tooManySearchMatches\" | \"tooManyInstancesFocused\" | \"unknownSearchError\" | \"unknownInstanceFocusError\";\n/** @internal */\nexport type ModelsTreeSubTreeError = \"unknownSubTreeError\";\n\n/** @internal */\nexport function useSearchPaths({\n hierarchyConfiguration,\n searchText,\n getSearchPaths,\n getSubTreePaths,\n getModelsTreeIdsCache,\n onModelsFiltered,\n onSearchPathsChanged,\n componentId,\n}: {\n hierarchyConfiguration: ModelsTreeHierarchyConfiguration;\n searchText?: string;\n getSearchPaths?: (props: {\n /** A function that creates search paths based on provided target instance keys or node label. */\n createInstanceKeyPaths: (props: { targetItems: Array<InstanceKey | ElementsGroupInfo> } | { label: string }) => Promise<NormalizedHierarchySearchPath[]>;\n /** Search text which would be used to create search paths if `getSearchPaths` wouldn't be provided. */\n searchText?: string;\n }) => Promise<HierarchySearchPath[] | undefined>;\n getSubTreePaths?: (props: {\n /** A function that creates search paths based on provided target instance keys. */\n createInstanceKeyPaths: (props: { targetItems: Array<InstanceKey | ElementsGroupInfo> }) => Promise<NormalizedHierarchySearchPath[]>;\n }) => Promise<HierarchySearchPath[]>;\n getModelsTreeIdsCache: () => ModelsTreeIdsCache;\n onModelsFiltered?: (modelIds: Id64String[] | undefined) => void;\n onSearchPathsChanged: (paths: HierarchySearchPath[] | undefined) => void;\n componentId: GuidString;\n}): {\n getPaths: VisibilityTreeProps[\"getSearchPaths\"] | undefined;\n searchError: ModelsTreeSearchError | undefined;\n subTreeError: ModelsTreeSubTreeError | undefined;\n} {\n const [searchError, setSearchError] = useState<ModelsTreeSearchError | undefined>(undefined);\n const [subTreeError, setSubTreeError] = useState<ModelsTreeSubTreeError | undefined>(undefined);\n\n const { onFeatureUsed } = useTelemetryContext();\n const { loadFocusedItems } = useFocusedInstancesContext();\n\n useEffect(() => {\n setSearchError(undefined);\n setSubTreeError(undefined);\n onModelsFiltered?.(undefined);\n\n // reset search paths if there is no search applied. This allows to keep current search paths until new paths are loaded.\n if (!loadFocusedItems && !getSearchPaths && !searchText && !getSubTreePaths) {\n onSearchPathsChanged(undefined);\n }\n }, [loadFocusedItems, getSearchPaths, getSubTreePaths, searchText, onModelsFiltered, onSearchPathsChanged]);\n\n const getSubTreePathsInternal = useMemo<\n ((...props: Parameters<Required<VisibilityTreeProps>[\"getSearchPaths\"]>) => Promise<HierarchyNodeIdentifiersPath[]>) | undefined\n >(() => {\n if (!getSubTreePaths) {\n return undefined;\n }\n return async ({ imodelAccess, abortSignal }) => {\n try {\n const paths = await getSubTreePaths({\n createInstanceKeyPaths: async ({ targetItems }) =>\n ModelsTreeDefinition.createInstanceKeyPaths({\n imodelAccess,\n targetItems,\n idsCache: getModelsTreeIdsCache(),\n hierarchyConfig: hierarchyConfiguration,\n limit: \"unbounded\",\n abortSignal,\n componentId: `${componentId}/subTree`,\n }),\n });\n return paths.map(HierarchySearchPath.normalize).map(({ path }) => path);\n } catch {\n const newError = \"unknownSubTreeError\";\n setSubTreeError(newError);\n return [];\n }\n };\n }, [getModelsTreeIdsCache, hierarchyConfiguration, getSubTreePaths, componentId]);\n\n const getPaths = useMemo<VisibilityTreeProps[\"getSearchPaths\"] | undefined>(() => {\n const handlePaths = async (searchPaths: HierarchySearchPath[] | undefined, classInspector: ECClassHierarchyInspector) => {\n onSearchPathsChanged(searchPaths);\n if (!onModelsFiltered) {\n return;\n }\n\n const modelIds = searchPaths ? await getModels(searchPaths, getModelsTreeIdsCache(), classInspector) : undefined;\n onModelsFiltered(modelIds);\n };\n\n if (loadFocusedItems) {\n return async ({ imodelAccess, abortSignal }) => {\n try {\n const focusedItems = await collectFocusedItems(loadFocusedItems);\n return await createSearchPathsResult({\n getSearchPaths: async () => {\n const paths = await ModelsTreeDefinition.createInstanceKeyPaths({\n imodelAccess,\n idsCache: getModelsTreeIdsCache(),\n targetItems: focusedItems,\n hierarchyConfig: hierarchyConfiguration,\n abortSignal,\n componentId,\n });\n return paths.map(({ path, options }) => ({ path, options: { ...options, reveal: true } }));\n },\n getSubTreePaths: async () => (getSubTreePathsInternal ? getSubTreePathsInternal({ imodelAccess, abortSignal }) : undefined),\n handlePaths: async (paths) => handlePaths(paths, imodelAccess),\n });\n } catch (e) {\n const newError = e instanceof SearchLimitExceededError ? \"tooManyInstancesFocused\" : \"unknownInstanceFocusError\";\n if (newError !== \"tooManyInstancesFocused\") {\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 setSearchError(newError);\n return [];\n }\n };\n }\n\n if (getSearchPaths) {\n return async ({ imodelAccess, abortSignal }) => {\n try {\n return await createSearchPathsResult({\n getSearchPaths: async () => {\n const paths = await getSearchPaths({\n createInstanceKeyPaths: async (props) =>\n ModelsTreeDefinition.createInstanceKeyPaths({\n ...props,\n imodelAccess,\n idsCache: getModelsTreeIdsCache(),\n hierarchyConfig: hierarchyConfiguration,\n limit: \"unbounded\",\n abortSignal,\n componentId,\n }),\n searchText,\n });\n return paths?.map(HierarchySearchPath.normalize);\n },\n getSubTreePaths: async () => (getSubTreePathsInternal ? getSubTreePathsInternal({ imodelAccess, abortSignal }) : undefined),\n handlePaths: async (paths) => handlePaths(paths, imodelAccess),\n });\n } catch (e) {\n const newError = e instanceof SearchLimitExceededError ? \"tooManySearchMatches\" : \"unknownSearchError\";\n if (newError !== \"tooManySearchMatches\") {\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 setSearchError(newError);\n return [];\n }\n };\n }\n\n if (searchText) {\n return async ({ imodelAccess, abortSignal }) => {\n onFeatureUsed({ featureId: \"search\", reportInteraction: true });\n try {\n return await createSearchPathsResult({\n getSearchPaths: async () => {\n const paths = await ModelsTreeDefinition.createInstanceKeyPaths({\n imodelAccess,\n label: searchText,\n idsCache: getModelsTreeIdsCache(),\n hierarchyConfig: hierarchyConfiguration,\n abortSignal,\n componentId,\n });\n return paths.map(({ path, options }) => ({ path, options: { ...options, reveal: true } }));\n },\n getSubTreePaths: async () => (getSubTreePathsInternal ? getSubTreePathsInternal({ imodelAccess, abortSignal }) : undefined),\n handlePaths: async (paths) => handlePaths(paths, imodelAccess),\n });\n } catch (e) {\n const newError = e instanceof SearchLimitExceededError ? \"tooManySearchMatches\" : \"unknownSearchError\";\n if (newError !== \"tooManySearchMatches\") {\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 setSearchError(newError);\n return [];\n }\n };\n }\n return getSubTreePathsInternal;\n }, [\n searchText,\n loadFocusedItems,\n getModelsTreeIdsCache,\n onFeatureUsed,\n getSearchPaths,\n hierarchyConfiguration,\n onModelsFiltered,\n onSearchPathsChanged,\n getSubTreePathsInternal,\n componentId,\n ]);\n\n return {\n getPaths,\n searchError,\n subTreeError,\n };\n}\n\nasync function getModels(paths: HierarchySearchPath[], idsCache: ModelsTreeIdsCache, classInspector: ECClassHierarchyInspector) {\n if (!paths) {\n return undefined;\n }\n\n const targetModelIds = new Set<Id64String>();\n const targetSubjectIds = new Set<Id64String>();\n for (const path of paths) {\n const currPath = Array.isArray(path) ? path : path.path;\n for (let i = 0; i < currPath.length; i++) {\n const currStep = currPath[i];\n if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(currStep)) {\n break;\n }\n\n // if paths end with subject need to get all models under that subject\n if (i === currPath.length - 1 && currStep.className === CLASS_NAME_Subject) {\n targetSubjectIds.add(currStep.id);\n break;\n }\n\n // collect all the models from the search path\n if (await classInspector.classDerivesFrom(currStep.className, CLASS_NAME_GeometricModel3d)) {\n targetModelIds.add(currStep.id);\n }\n }\n }\n\n const matchingModels = await firstValueFrom(idsCache.getSubjectModelIds(targetSubjectIds));\n return [...targetModelIds, ...matchingModels];\n}\n\nasync function collectFocusedItems(loadFocusedItems: () => AsyncIterableIterator<InstanceKey | GroupingHierarchyNode>) {\n const focusedItems: Array<InstanceKey | ElementsGroupInfo> = [];\n const groupingNodeInfos: Array<{\n parentKey: InstancesNodeKey;\n parentType: \"element\" | \"category\";\n groupingNode: ClassGroupingHierarchyNode;\n modelIds: Id64Array;\n }> = [];\n for await (const key of loadFocusedItems()) {\n if (\"id\" in key) {\n focusedItems.push(key);\n continue;\n }\n\n if (!HierarchyNodeKey.isClassGrouping(key.key)) {\n continue;\n }\n\n const groupingNode = key as ClassGroupingHierarchyNode;\n if (!groupingNode.nonGroupingAncestor || !HierarchyNodeKey.isInstances(groupingNode.nonGroupingAncestor.key)) {\n continue;\n }\n\n const parentKey = groupingNode.nonGroupingAncestor.key;\n const type = groupingNode.nonGroupingAncestor.extendedData?.isCategory ? \"category\" : \"element\";\n const modelIds = ((groupingNode.nonGroupingAncestor.extendedData?.modelIds as Id64String[][]) ?? []).flatMap((ids) => ids);\n groupingNodeInfos.push({ groupingNode, parentType: type, parentKey, modelIds });\n }\n focusedItems.push(\n ...groupingNodeInfos.map(({ parentKey, parentType, groupingNode, modelIds }) => ({\n parent:\n parentType === \"element\"\n ? { type: \"element\" as const, ids: parentKey.instanceKeys.map((key) => key.id) }\n : { type: \"category\" as const, ids: parentKey.instanceKeys.map((key) => key.id), modelIds },\n groupingNode,\n })),\n );\n return focusedItems;\n}\n\nasync function createSearchPathsResult({\n getSubTreePaths,\n getSearchPaths,\n handlePaths,\n}: {\n getSubTreePaths: () => Promise<HierarchyNodeIdentifiersPath[] | undefined>;\n getSearchPaths: () => Promise<NormalizedHierarchySearchPath[] | undefined>;\n handlePaths: (searchPaths: HierarchySearchPath[] | undefined) => Promise<void>;\n}): Promise<HierarchySearchPath[] | undefined> {\n const [subTreePaths, searchPaths] = await Promise.all([getSubTreePaths(), getSearchPaths()]);\n let joinedPaths: HierarchySearchPath[] | undefined;\n try {\n if (subTreePaths && searchPaths) {\n return (joinedPaths = joinHierarchySearchPaths(subTreePaths, searchPaths));\n }\n if (subTreePaths) {\n return (joinedPaths = subTreePaths);\n }\n if (searchPaths) {\n return (joinedPaths = searchPaths);\n }\n } finally {\n void handlePaths(joinedPaths);\n }\n return joinedPaths;\n}\n"]}
@@ -2,14 +2,14 @@ import { HierarchyNode } from "@itwin/presentation-hierarchies";
2
2
  import { HierarchyVisibilityHandlerImpl } from "../../../common/internal/useTreeHooks/UseCachedVisibility.js";
3
3
  import type { Observable } from "rxjs";
4
4
  import type { Id64Arg } from "@itwin/core-bentley";
5
- import type { GroupingHierarchyNode, HierarchyFilteringPath } from "@itwin/presentation-hierarchies";
5
+ import type { GroupingHierarchyNode, HierarchySearchPath } from "@itwin/presentation-hierarchies";
6
6
  import type { ECClassHierarchyInspector } from "@itwin/presentation-shared";
7
7
  import type { AlwaysAndNeverDrawnElementInfo } from "../../../common/internal/AlwaysAndNeverDrawnElementInfo.js";
8
8
  import type { BaseTreeVisibilityHandlerOverrides, TreeSpecificVisibilityHandler } from "../../../common/internal/visibility/BaseVisibilityHelper.js";
9
9
  import type { TreeWidgetViewport } from "../../../common/TreeWidgetViewport.js";
10
10
  import type { HierarchyVisibilityHandlerOverridableMethod, HierarchyVisibilityOverrideHandler, VisibilityStatus } from "../../../common/UseHierarchyVisibility.js";
11
11
  import type { ModelsTreeIdsCache } from "../ModelsTreeIdsCache.js";
12
- import type { ModelsTreeFilterTargets } from "./FilteredTree.js";
12
+ import type { ModelsTreeSearchTargets } from "./SearchResultsTree.js";
13
13
  /**
14
14
  * Functionality of Models tree visibility handler that can be overridden.
15
15
  * Each callback is provided original implementation and reference to a `HierarchyVisibilityHandler`.
@@ -45,15 +45,15 @@ export interface ModelsTreeVisibilityHandlerProps {
45
45
  * It knows how to get and change visibility status of nodes created by hierarchy definition.
46
46
  * @internal
47
47
  */
48
- export declare class ModelsTreeVisibilityHandler implements Disposable, TreeSpecificVisibilityHandler<ModelsTreeFilterTargets> {
48
+ export declare class ModelsTreeVisibilityHandler implements Disposable, TreeSpecificVisibilityHandler<ModelsTreeSearchTargets> {
49
49
  #private;
50
50
  constructor(constructorProps: ModelsTreeVisibilityHandlerProps);
51
51
  [Symbol.dispose](): void;
52
- changeFilterTargetsVisibilityStatus(targets: ModelsTreeFilterTargets, on: boolean): Observable<void>;
52
+ changeSearchTargetsVisibilityStatus(targets: ModelsTreeSearchTargets, on: boolean): Observable<void>;
53
53
  getVisibilityStatus(node: HierarchyNode): Observable<VisibilityStatus>;
54
54
  /** Changes visibility of the items represented by the tree node. */
55
55
  changeVisibilityStatus(node: HierarchyNode, on: boolean): Observable<void>;
56
- getFilterTargetsVisibilityStatus(targets: ModelsTreeFilterTargets): Observable<VisibilityStatus>;
56
+ getSearchTargetsVisibilityStatus(targets: ModelsTreeSearchTargets): Observable<VisibilityStatus>;
57
57
  private getCategories;
58
58
  private getAllCategories;
59
59
  private getElementsCount;
@@ -71,6 +71,6 @@ export declare function createModelsTreeVisibilityHandler(props: {
71
71
  idsCache: ModelsTreeIdsCache;
72
72
  imodelAccess: ECClassHierarchyInspector;
73
73
  overrides?: ModelsTreeVisibilityHandlerOverrides;
74
- filteredPaths?: HierarchyFilteringPath[];
75
- }): HierarchyVisibilityHandlerImpl<ModelsTreeFilterTargets>;
74
+ searchPaths?: HierarchySearchPath[];
75
+ }): HierarchyVisibilityHandlerImpl<ModelsTreeSearchTargets>;
76
76
  //# sourceMappingURL=ModelsTreeVisibilityHandler.d.ts.map
@@ -3,15 +3,15 @@
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import { concat, defer, EMPTY, from, map, merge, mergeMap, of } from "rxjs";
6
- import { assert, Id64 } from "@itwin/core-bentley";
6
+ import { assert, Guid, Id64 } from "@itwin/core-bentley";
7
7
  import { HierarchyNode } from "@itwin/presentation-hierarchies";
8
8
  import { createVisibilityStatus } from "../../../common/internal/Tooltip.js";
9
9
  import { HierarchyVisibilityHandlerImpl } from "../../../common/internal/useTreeHooks/UseCachedVisibility.js";
10
- import { releaseMainThreadOnItemsCount } from "../../../common/internal/Utils.js";
10
+ import { fromWithRelease } from "../../../common/internal/Utils.js";
11
11
  import { mergeVisibilityStatuses } from "../../../common/internal/VisibilityUtils.js";
12
12
  import { ModelsTreeNode } from "../ModelsTreeNode.js";
13
- import { createFilteredModelsTree } from "./FilteredTree.js";
14
13
  import { ModelsTreeVisibilityHelper } from "./ModelsTreeVisibilityHelper.js";
14
+ import { createModelsSearchResultsTree } from "./SearchResultsTree.js";
15
15
  /**
16
16
  * Handles visibility status of models tree nodes.
17
17
  *
@@ -46,7 +46,7 @@ export class ModelsTreeVisibilityHandler {
46
46
  [Symbol.dispose]() {
47
47
  this.#visibilityHelper[Symbol.dispose]();
48
48
  }
49
- changeFilterTargetsVisibilityStatus(targets, on) {
49
+ changeSearchTargetsVisibilityStatus(targets, on) {
50
50
  return defer(() => {
51
51
  const { subjectIds, modelIds, categories, elements } = targets;
52
52
  const observables = new Array();
@@ -64,7 +64,7 @@ export class ModelsTreeVisibilityHandler {
64
64
  }))));
65
65
  }
66
66
  if (elements?.length) {
67
- observables.push(from(elements).pipe(releaseMainThreadOnItemsCount(50), mergeMap(({ modelId, elements: elementsMap, categoryId }) => this.#visibilityHelper.changeElementsVisibilityStatus({ modelId, categoryId, elementIds: [...elementsMap.keys()], on }))));
67
+ observables.push(fromWithRelease({ source: elements, releaseOnCount: 50 }).pipe(mergeMap(({ modelId, elements: elementsMap, categoryId }) => this.#visibilityHelper.changeElementsVisibilityStatus({ modelId, categoryId, elementIds: [...elementsMap.keys()], on }))));
68
68
  }
69
69
  return merge(...observables);
70
70
  });
@@ -171,7 +171,7 @@ export class ModelsTreeVisibilityHandler {
171
171
  }
172
172
  return changeObs;
173
173
  }
174
- getFilterTargetsVisibilityStatus(targets) {
174
+ getSearchTargetsVisibilityStatus(targets) {
175
175
  return defer(() => {
176
176
  const { subjectIds, modelIds, categories, elements } = targets;
177
177
  const observables = new Array();
@@ -189,7 +189,7 @@ export class ModelsTreeVisibilityHandler {
189
189
  }))));
190
190
  }
191
191
  if (elements?.length) {
192
- observables.push(from(elements).pipe(releaseMainThreadOnItemsCount(50), mergeMap(({ modelId, elements: elementsMap, categoryId }) => this.#visibilityHelper.getElementsVisibilityStatus({ modelId, categoryId, elementIds: [...elementsMap.keys()], type: "GeometricElement3d" }))));
192
+ observables.push(fromWithRelease({ source: elements, releaseOnCount: 50 }).pipe(mergeMap(({ modelId, elements: elementsMap, categoryId }) => this.#visibilityHelper.getElementsVisibilityStatus({ modelId, categoryId, elementIds: [...elementsMap.keys()], type: "GeometricElement3d" }))));
193
193
  }
194
194
  return merge(...observables);
195
195
  }).pipe(mergeVisibilityStatuses);
@@ -207,7 +207,7 @@ export class ModelsTreeVisibilityHandler {
207
207
  return this.#props.idsCache.getCategoriesElementModels(props.categoryIds);
208
208
  }
209
209
  getSubCategories(props) {
210
- return from(Id64.iterable(props.categoryIds)).pipe(map((categoryId) => ({ id: categoryId, subCategories: undefined })));
210
+ return this.#props.idsCache.getSubCategories(props.categoryId);
211
211
  }
212
212
  getSubModels(props) {
213
213
  if ("modelIds" in props) {
@@ -242,12 +242,12 @@ export class ModelsTreeVisibilityHandler {
242
242
  */
243
243
  export function createModelsTreeVisibilityHandler(props) {
244
244
  return new HierarchyVisibilityHandlerImpl({
245
- getFilteredTree: () => {
246
- if (!props.filteredPaths) {
245
+ getSearchResultsTree: () => {
246
+ if (!props.searchPaths) {
247
247
  return undefined;
248
248
  }
249
- return createFilteredModelsTree({
250
- filteringPaths: props.filteredPaths,
249
+ return createModelsSearchResultsTree({
250
+ searchPaths: props.searchPaths,
251
251
  imodelAccess: props.imodelAccess,
252
252
  });
253
253
  },
@@ -261,7 +261,7 @@ export function createModelsTreeVisibilityHandler(props) {
261
261
  });
262
262
  },
263
263
  viewport: props.viewport,
264
- componentId: "Test",
264
+ componentId: Guid.createValue(),
265
265
  });
266
266
  }
267
267
  //# sourceMappingURL=ModelsTreeVisibilityHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModelsTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../../../src/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,8BAA8B,EAAE,MAAM,8DAA8D,CAAC;AAC9G,OAAO,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AA8C7E;;;;;GAKG;AACH,MAAM,OAAO,2BAA2B;IACtC,iBAAiB,CAA6B;IACrC,MAAM,CAAmC;IAElD,YAAY,gBAAkD;QAC5D,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC;QAC/B,6EAA6E;QAC7E,mDAAmD;QACnD,MAAM,YAAY,GAAiB;YACjC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YACnD,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YACzD,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAC3C,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YACzD,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YACjD,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC;YAC/D,gBAAgB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE;SAChD,CAAC;QACF,IAAI,CAAC,iBAAiB,GAAG,IAAI,0BAA0B,CAAC;YACtD,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,8BAA8B,EAAE,IAAI,CAAC,MAAM,CAAC,8BAA8B;YAC1E,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe;YAC5C,YAAY;YACZ,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;SACjC,CAAC,CAAC;IACL,CAAC;IAEM,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3C,CAAC;IAEM,mCAAmC,CAAC,OAAgC,EAAE,EAAW;QACtF,OAAO,KAAK,CAAC,GAAG,EAAE;YAChB,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;YAC/D,MAAM,WAAW,GAAG,IAAI,KAAK,EAAoB,CAAC;YAClD,IAAI,UAAU,EAAE,IAAI,EAAE,CAAC;gBACrB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAC9F,CAAC;YAED,IAAI,QAAQ,EAAE,IAAI,EAAE,CAAC;gBACnB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,4BAA4B,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1F,CAAC;YAED,IAAI,UAAU,EAAE,MAAM,EAAE,CAAC;gBACvB,WAAW,CAAC,IAAI,CACd,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CACnB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CACpC,IAAI,CAAC,iBAAiB,CAAC,gCAAgC,CAAC;oBACtD,WAAW;oBACX,OAAO;oBACP,EAAE;iBACH,CAAC,CACH,CACF,CACF,CAAC;YACJ,CAAC;YAED,IAAI,QAAQ,EAAE,MAAM,EAAE,CAAC;gBACrB,WAAW,CAAC,IAAI,CACd,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CACjB,6BAA6B,CAAC,EAAE,CAAC,EACjC,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE,CAC1D,IAAI,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CACxH,CACF,CACF,CAAC;YACJ,CAAC;YAED,OAAO,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,mBAAmB,CAAC,IAAmB;QAC5C,IAAI,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,kCAAkC,CAAC;gBACvE,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,UAAU,EAAE,QAAQ,CAAC,UAAU;aAChC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,6BAA6B,CAAC;gBAC/D,aAAa,EAAE,EAAE,IAAI,EAAE;gBACvB,mBAAmB,EAAE,MAAM;gBAC3B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,sCAAsC;aACxE,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,4EAA4E;YAC5E,OAAO,IAAI,CAAC,iBAAiB,CAAC,2BAA2B,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACxH,CAAC;QAED,IAAI,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC7I,CAAC;QAED,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC,iBAAiB,CAAC,6BAA6B,CAAC;gBAC1D,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;gBACtD,OAAO;gBACP,IAAI,EAAE,iBAAiB;aACxB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,UAAU,GAAG,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,EAAE,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,IAAI,CAAC,iBAAiB,CAAC,2BAA2B,CAAC;YACxD,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YACrD,OAAO;YACP,UAAU;YACV,IAAI,EAAE,oBAAoB;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,oEAAoE;IAC7D,sBAAsB,CAAC,IAAmB,EAAE,EAAW;QAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE;YAC3B,IAAI,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAChD,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,qCAAqC,CAAC;oBAC1E,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,EAAE;iBACH,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,6BAA6B,CAAC;oBAC/D,aAAa,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;oBAC3B,mBAAmB,EAAE,MAAM;oBAC3B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,yCAAyC;iBAC3E,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvC,OAAO,IAAI,CAAC,iBAAiB,CAAC,8BAA8B,CAAC;oBAC3D,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtD,EAAE;iBACH,CAAC,CAAC;YACL,CAAC;YAED,IAAI,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,OAAO,IAAI,CAAC,iBAAiB,CAAC,4BAA4B,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC1H,CAAC;YAED,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,OAAO,IAAI,CAAC,iBAAiB,CAAC,gCAAgC,CAAC;oBAC7D,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;oBACtD,OAAO;oBACP,EAAE;iBACH,CAAC,CAAC;YACL,CAAC;YAED,MAAM,UAAU,GAAG,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC,iBAAiB,CAAC,8BAA8B,CAAC;gBAC3D,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;gBACrD,OAAO;gBACP,UAAU;gBACV,EAAE;aACH,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;YAChD,OAAO,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,0BAA0B,EAAE,EAAE,SAAS,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,gCAAgC,CAAC,OAAgC;QACtE,OAAO,KAAK,CAAC,GAAG,EAAE;YAChB,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;YAC/D,MAAM,WAAW,GAAG,IAAI,KAAK,EAAgC,CAAC;YAC9D,IAAI,UAAU,EAAE,IAAI,EAAE,CAAC;gBACrB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,2BAA2B,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YACvF,CAAC;YAED,IAAI,QAAQ,EAAE,IAAI,EAAE,CAAC;gBACnB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;YAC7G,CAAC;YAED,IAAI,UAAU,EAAE,MAAM,EAAE,CAAC;gBACvB,WAAW,CAAC,IAAI,CACd,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CACnB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CACpC,IAAI,CAAC,iBAAiB,CAAC,6BAA6B,CAAC;oBACnD,WAAW;oBACX,OAAO;oBACP,IAAI,EAAE,iBAAiB;iBACxB,CAAC,CACH,CACF,CACF,CAAC;YACJ,CAAC;YAED,IAAI,QAAQ,EAAE,MAAM,EAAE,CAAC;gBACrB,WAAW,CAAC,IAAI,CACd,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CACjB,6BAA6B,CAAC,EAAE,CAAC,EACjC,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE,CAC1D,IAAI,CAAC,iBAAiB,CAAC,2BAA2B,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAC7I,CACF,CACF,CAAC;YACJ,CAAC;YAED,OAAO,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACnC,CAAC;IAEO,aAAa,CAAC,KAAmD;QACvE,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAC7C,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CACvJ,CAAC;IACJ,CAAC;IAEO,gBAAgB;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IAChH,CAAC;IAEO,gBAAgB,CAAC,KAAsD;QAC7E,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACxF,CAAC;IAEO,SAAS,CAAC,KAA+C;QAC/D,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5E,CAAC;IAEO,gBAAgB,CAAC,KAAsD;QAC7E,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1H,CAAC;IAEO,YAAY,CAAC,KAAkD;QACrE,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAC7C,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE;gBACnB,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;oBACrB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,4BAA4B,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7I,CAAC;gBACD,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,IAAI,CAC3D,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,4BAA4B,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,EAClG,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CACjD,CAAC;YACJ,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAChD,QAAQ,CAAC,CAAC,UAAU,EAAE,EAAE,CACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,4BAA4B,CAAC,KAAK,CAAC,OAAQ,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CACxI,CACF,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAC5E,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YAC1B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAC1C,CAAC;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CACtB,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,4BAA4B,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EACrF,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CACxC,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,mBAAmB,CAAC,IAA2B;QACrD,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;QAElC,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;IAC7C,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,iCAAiC,CAAC,KAMjD;IACC,OAAO,IAAI,8BAA8B,CAA0B;QACjE,eAAe,EAAE,GAA+D,EAAE;YAChF,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;gBACzB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,wBAAwB,CAAC;gBAC9B,cAAc,EAAE,KAAK,CAAC,aAAa;gBACnC,YAAY,EAAE,KAAK,CAAC,YAAY;aACjC,CAAC,CAAC;QACL,CAAC;QACD,gCAAgC,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE;YAC1D,OAAO,IAAI,2BAA2B,CAAC;gBACrC,8BAA8B,EAAE,IAAI;gBACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,eAAe;gBACf,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,CAAC,CAAC;QACL,CAAC;QACD,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,WAAW,EAAE,MAAM;KACpB,CAAC,CAAC;AACL,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 { concat, defer, EMPTY, from, map, merge, mergeMap, of } from \"rxjs\";\nimport { assert, Id64 } from \"@itwin/core-bentley\";\nimport { HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { createVisibilityStatus } from \"../../../common/internal/Tooltip.js\";\nimport { HierarchyVisibilityHandlerImpl } from \"../../../common/internal/useTreeHooks/UseCachedVisibility.js\";\nimport { releaseMainThreadOnItemsCount } from \"../../../common/internal/Utils.js\";\nimport { mergeVisibilityStatuses } from \"../../../common/internal/VisibilityUtils.js\";\nimport { ModelsTreeNode } from \"../ModelsTreeNode.js\";\nimport { createFilteredModelsTree } from \"./FilteredTree.js\";\nimport { ModelsTreeVisibilityHelper } from \"./ModelsTreeVisibilityHelper.js\";\n\nimport type { Observable } from \"rxjs\";\nimport type { Id64Arg } from \"@itwin/core-bentley\";\nimport type { GroupingHierarchyNode, HierarchyFilteringPath } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector } from \"@itwin/presentation-shared\";\nimport type { AlwaysAndNeverDrawnElementInfo } from \"../../../common/internal/AlwaysAndNeverDrawnElementInfo.js\";\nimport type { FilteredTree } from \"../../../common/internal/visibility/BaseFilteredTree.js\";\nimport type {\n BaseIdsCache,\n BaseTreeVisibilityHandlerOverrides,\n TreeSpecificVisibilityHandler,\n} from \"../../../common/internal/visibility/BaseVisibilityHelper.js\";\nimport type { TreeWidgetViewport } from \"../../../common/TreeWidgetViewport.js\";\nimport type {\n HierarchyVisibilityHandlerOverridableMethod,\n HierarchyVisibilityOverrideHandler,\n VisibilityStatus,\n} from \"../../../common/UseHierarchyVisibility.js\";\nimport type { ModelsTreeIdsCache } from \"../ModelsTreeIdsCache.js\";\nimport type { ModelsTreeFilterTargets } from \"./FilteredTree.js\";\n\n/**\n * Functionality of Models tree visibility handler that can be overridden.\n * Each callback is provided original implementation and reference to a `HierarchyVisibilityHandler`.\n * @beta\n */\nexport interface ModelsTreeVisibilityHandlerOverrides extends BaseTreeVisibilityHandlerOverrides {\n getSubjectsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { subjectIds: Id64Arg }) => Promise<VisibilityStatus>>;\n getElementGroupingNodeVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { node: GroupingHierarchyNode }) => Promise<VisibilityStatus>>;\n\n changeSubjectsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { subjectIds: Id64Arg; on: boolean }) => Promise<void>>;\n changeElementGroupingNodeVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<\n (props: { node: GroupingHierarchyNode; on: boolean }) => Promise<void>\n >;\n}\n\n/** @internal */\nexport interface ModelsTreeVisibilityHandlerProps {\n idsCache: ModelsTreeIdsCache;\n viewport: TreeWidgetViewport;\n alwaysAndNeverDrawnElementInfo: AlwaysAndNeverDrawnElementInfo;\n overrideHandler: HierarchyVisibilityOverrideHandler;\n overrides?: ModelsTreeVisibilityHandlerOverrides;\n}\n\n/**\n * Handles visibility status of models tree nodes.\n *\n * It knows how to get and change visibility status of nodes created by hierarchy definition.\n * @internal\n */\nexport class ModelsTreeVisibilityHandler implements Disposable, TreeSpecificVisibilityHandler<ModelsTreeFilterTargets> {\n #visibilityHelper: ModelsTreeVisibilityHelper;\n readonly #props: ModelsTreeVisibilityHandlerProps;\n\n constructor(constructorProps: ModelsTreeVisibilityHandlerProps) {\n this.#props = constructorProps;\n // Remove after https://github.com/iTwin/viewer-components-react/issues/1421.\n // We won't need to create a custom base ids cache.\n const baseIdsCache: BaseIdsCache = {\n getCategories: (props) => this.getCategories(props),\n getElementsCount: (props) => this.getElementsCount(props),\n getModels: (props) => this.getModels(props),\n getSubCategories: (props) => this.getSubCategories(props),\n getSubModels: (props) => this.getSubModels(props),\n hasSubModel: (props) => this.#props.idsCache.hasSubModel(props),\n getAllCategories: () => this.getAllCategories(),\n };\n this.#visibilityHelper = new ModelsTreeVisibilityHelper({\n viewport: this.#props.viewport,\n idsCache: this.#props.idsCache,\n alwaysAndNeverDrawnElementInfo: this.#props.alwaysAndNeverDrawnElementInfo,\n overrideHandler: this.#props.overrideHandler,\n baseIdsCache,\n overrides: this.#props.overrides,\n });\n }\n\n public [Symbol.dispose]() {\n this.#visibilityHelper[Symbol.dispose]();\n }\n\n public changeFilterTargetsVisibilityStatus(targets: ModelsTreeFilterTargets, on: boolean): Observable<void> {\n return defer(() => {\n const { subjectIds, modelIds, categories, elements } = targets;\n const observables = new Array<Observable<void>>();\n if (subjectIds?.size) {\n observables.push(this.#visibilityHelper.changeSubjectsVisibilityStatus({ subjectIds, on }));\n }\n\n if (modelIds?.size) {\n observables.push(this.#visibilityHelper.changeModelsVisibilityStatus({ modelIds, on }));\n }\n\n if (categories?.length) {\n observables.push(\n from(categories).pipe(\n mergeMap(({ modelId, categoryIds }) =>\n this.#visibilityHelper.changeCategoriesVisibilityStatus({\n categoryIds,\n modelId,\n on,\n }),\n ),\n ),\n );\n }\n\n if (elements?.length) {\n observables.push(\n from(elements).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(({ modelId, elements: elementsMap, categoryId }) =>\n this.#visibilityHelper.changeElementsVisibilityStatus({ modelId, categoryId, elementIds: [...elementsMap.keys()], on }),\n ),\n ),\n );\n }\n\n return merge(...observables);\n });\n }\n\n public getVisibilityStatus(node: HierarchyNode): Observable<VisibilityStatus> {\n if (HierarchyNode.isClassGroupingNode(node)) {\n const nodeInfo = this.getGroupingNodeInfo(node);\n const result = this.#visibilityHelper.getGroupedElementsVisibilityStatus({\n categoryId: nodeInfo.categoryId,\n modelId: nodeInfo.modelId,\n elementIds: nodeInfo.elementIds,\n });\n return this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: { node },\n nonOverriddenResult: result,\n override: this.#props.overrides?.getElementGroupingNodeVisibilityStatus,\n });\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n // note: subject nodes may be merged to represent multiple subject instances\n return this.#visibilityHelper.getSubjectsVisibilityStatus({ subjectIds: node.key.instanceKeys.map((key) => key.id) });\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.#visibilityHelper.getModelsVisibilityStatus({ modelIds: node.key.instanceKeys.map(({ id }) => id), type: \"GeometricModel3d\" });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n if (!modelId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.#visibilityHelper.getCategoriesVisibilityStatus({\n categoryIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n type: \"SpatialCategory\",\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n return this.#visibilityHelper.getElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n categoryId,\n type: \"GeometricElement3d\",\n });\n }\n\n /** Changes visibility of the items represented by the tree node. */\n public changeVisibilityStatus(node: HierarchyNode, on: boolean): Observable<void> {\n const changeObs = defer(() => {\n if (HierarchyNode.isClassGroupingNode(node)) {\n const nodeInfo = this.getGroupingNodeInfo(node);\n const result = this.#visibilityHelper.changeGroupedElementsVisibilityStatus({\n categoryId: nodeInfo.categoryId,\n modelId: nodeInfo.modelId,\n elementIds: nodeInfo.elementIds,\n on,\n });\n return this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: { node, on },\n nonOverriddenResult: result,\n override: this.#props.overrides?.changeElementGroupingNodeVisibilityStatus,\n });\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n return this.#visibilityHelper.changeSubjectsVisibilityStatus({\n subjectIds: node.key.instanceKeys.map((key) => key.id),\n on,\n });\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.#visibilityHelper.changeModelsVisibilityStatus({ modelIds: node.key.instanceKeys.map(({ id }) => id), on });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n if (!modelId) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.#visibilityHelper.changeCategoriesVisibilityStatus({\n categoryIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n on,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return EMPTY;\n }\n\n return this.#visibilityHelper.changeElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n categoryId,\n on,\n });\n });\n\n if (this.#props.viewport.isAlwaysDrawnExclusive) {\n return concat(this.#visibilityHelper.removeAlwaysDrawnExclusive(), changeObs);\n }\n return changeObs;\n }\n\n public getFilterTargetsVisibilityStatus(targets: ModelsTreeFilterTargets): Observable<VisibilityStatus> {\n return defer(() => {\n const { subjectIds, modelIds, categories, elements } = targets;\n const observables = new Array<Observable<VisibilityStatus>>();\n if (subjectIds?.size) {\n observables.push(this.#visibilityHelper.getSubjectsVisibilityStatus({ subjectIds }));\n }\n\n if (modelIds?.size) {\n observables.push(this.#visibilityHelper.getModelsVisibilityStatus({ modelIds, type: \"GeometricModel3d\" }));\n }\n\n if (categories?.length) {\n observables.push(\n from(categories).pipe(\n mergeMap(({ modelId, categoryIds }) =>\n this.#visibilityHelper.getCategoriesVisibilityStatus({\n categoryIds,\n modelId,\n type: \"SpatialCategory\",\n }),\n ),\n ),\n );\n }\n\n if (elements?.length) {\n observables.push(\n from(elements).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(({ modelId, elements: elementsMap, categoryId }) =>\n this.#visibilityHelper.getElementsVisibilityStatus({ modelId, categoryId, elementIds: [...elementsMap.keys()], type: \"GeometricElement3d\" }),\n ),\n ),\n );\n }\n\n return merge(...observables);\n }).pipe(mergeVisibilityStatuses);\n }\n\n private getCategories(props: Parameters<BaseIdsCache[\"getCategories\"]>[0]): ReturnType<BaseIdsCache[\"getCategories\"]> {\n return from(Id64.iterable(props.modelIds)).pipe(\n mergeMap((modelId) => this.#props.idsCache.getModelCategoryIds(modelId).pipe(map((categoryIds) => ({ id: modelId, spatialCategories: categoryIds })))),\n );\n }\n\n private getAllCategories(): ReturnType<BaseIdsCache[\"getAllCategories\"]> {\n return this.#props.idsCache.getAllCategories().pipe(map((categories) => ({ spatialCategories: categories })));\n }\n\n private getElementsCount(props: Parameters<BaseIdsCache[\"getElementsCount\"]>[0]): ReturnType<BaseIdsCache[\"getElementsCount\"]> {\n return this.#props.idsCache.getCategoryElementsCount(props.modelId, props.categoryId);\n }\n\n private getModels(props: Parameters<BaseIdsCache[\"getModels\"]>[0]): ReturnType<BaseIdsCache[\"getModels\"]> {\n return this.#props.idsCache.getCategoriesElementModels(props.categoryIds);\n }\n\n private getSubCategories(props: Parameters<BaseIdsCache[\"getSubCategories\"]>[0]): ReturnType<BaseIdsCache[\"getSubCategories\"]> {\n return from(Id64.iterable(props.categoryIds)).pipe(map((categoryId) => ({ id: categoryId, subCategories: undefined })));\n }\n\n private getSubModels(props: Parameters<BaseIdsCache[\"getSubModels\"]>[0]): ReturnType<BaseIdsCache[\"getSubModels\"]> {\n if (\"modelIds\" in props) {\n return from(Id64.iterable(props.modelIds)).pipe(\n mergeMap((modelId) => {\n if (props.categoryId) {\n return this.#props.idsCache.getCategoriesModeledElements(modelId, props.categoryId).pipe(map((subModels) => ({ id: modelId, subModels })));\n }\n return this.#props.idsCache.getModelCategoryIds(modelId).pipe(\n mergeMap((categoryIds) => this.#props.idsCache.getCategoriesModeledElements(modelId, categoryIds)),\n map((subModels) => ({ id: modelId, subModels })),\n );\n }),\n );\n }\n\n if (props.modelId) {\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n this.#props.idsCache.getCategoriesModeledElements(props.modelId!, categoryId).pipe(map((subModels) => ({ id: categoryId, subModels }))),\n ),\n );\n }\n\n return this.#props.idsCache.getCategoriesElementModels(props.categoryIds).pipe(\n mergeMap(({ id, models }) => {\n if (!models) {\n return of({ id, subModels: undefined });\n }\n return from(models).pipe(\n mergeMap((modelId) => this.#props.idsCache.getCategoriesModeledElements(modelId, id)),\n map((subModels) => ({ id, subModels })),\n );\n }),\n );\n }\n\n private getGroupingNodeInfo(node: GroupingHierarchyNode) {\n const modelId = ModelsTreeNode.getModelId(node);\n const categoryId = ModelsTreeNode.getCategoryId(node);\n assert(!!modelId && !!categoryId);\n\n const elementIds = node.groupedInstanceKeys.map((key) => key.id);\n return { modelId, categoryId, elementIds };\n }\n}\n\n/**\n * Creates models tree visibility handler. Is used by integration and performance tests.\n * @internal\n */\nexport function createModelsTreeVisibilityHandler(props: {\n viewport: TreeWidgetViewport;\n idsCache: ModelsTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n overrides?: ModelsTreeVisibilityHandlerOverrides;\n filteredPaths?: HierarchyFilteringPath[];\n}) {\n return new HierarchyVisibilityHandlerImpl<ModelsTreeFilterTargets>({\n getFilteredTree: (): undefined | Promise<FilteredTree<ModelsTreeFilterTargets>> => {\n if (!props.filteredPaths) {\n return undefined;\n }\n return createFilteredModelsTree({\n filteringPaths: props.filteredPaths,\n imodelAccess: props.imodelAccess,\n });\n },\n getTreeSpecificVisibilityHandler: (info, overrideHandler) => {\n return new ModelsTreeVisibilityHandler({\n alwaysAndNeverDrawnElementInfo: info,\n idsCache: props.idsCache,\n viewport: props.viewport,\n overrideHandler,\n overrides: props.overrides,\n });\n },\n viewport: props.viewport,\n componentId: \"Test\",\n });\n}\n"]}
1
+ {"version":3,"file":"ModelsTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../../../src/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.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 { concat, defer, EMPTY, from, map, merge, mergeMap, of } from \"rxjs\";\nimport { assert, Guid, Id64 } from \"@itwin/core-bentley\";\nimport { HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { createVisibilityStatus } from \"../../../common/internal/Tooltip.js\";\nimport { HierarchyVisibilityHandlerImpl } from \"../../../common/internal/useTreeHooks/UseCachedVisibility.js\";\nimport { fromWithRelease } from \"../../../common/internal/Utils.js\";\nimport { mergeVisibilityStatuses } from \"../../../common/internal/VisibilityUtils.js\";\nimport { ModelsTreeNode } from \"../ModelsTreeNode.js\";\nimport { ModelsTreeVisibilityHelper } from \"./ModelsTreeVisibilityHelper.js\";\nimport { createModelsSearchResultsTree } from \"./SearchResultsTree.js\";\n\nimport type { Observable } from \"rxjs\";\nimport type { Id64Arg } from \"@itwin/core-bentley\";\nimport type { GroupingHierarchyNode, HierarchySearchPath } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector } from \"@itwin/presentation-shared\";\nimport type { AlwaysAndNeverDrawnElementInfo } from \"../../../common/internal/AlwaysAndNeverDrawnElementInfo.js\";\nimport type { SearchResultsTree } from \"../../../common/internal/visibility/BaseSearchResultsTree.js\";\nimport type {\n BaseIdsCache,\n BaseTreeVisibilityHandlerOverrides,\n TreeSpecificVisibilityHandler,\n} from \"../../../common/internal/visibility/BaseVisibilityHelper.js\";\nimport type { TreeWidgetViewport } from \"../../../common/TreeWidgetViewport.js\";\nimport type {\n HierarchyVisibilityHandlerOverridableMethod,\n HierarchyVisibilityOverrideHandler,\n VisibilityStatus,\n} from \"../../../common/UseHierarchyVisibility.js\";\nimport type { ModelsTreeIdsCache } from \"../ModelsTreeIdsCache.js\";\nimport type { ModelsTreeSearchTargets } from \"./SearchResultsTree.js\";\n\n/**\n * Functionality of Models tree visibility handler that can be overridden.\n * Each callback is provided original implementation and reference to a `HierarchyVisibilityHandler`.\n * @beta\n */\nexport interface ModelsTreeVisibilityHandlerOverrides extends BaseTreeVisibilityHandlerOverrides {\n getSubjectsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { subjectIds: Id64Arg }) => Promise<VisibilityStatus>>;\n getElementGroupingNodeVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { node: GroupingHierarchyNode }) => Promise<VisibilityStatus>>;\n\n changeSubjectsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { subjectIds: Id64Arg; on: boolean }) => Promise<void>>;\n changeElementGroupingNodeVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<\n (props: { node: GroupingHierarchyNode; on: boolean }) => Promise<void>\n >;\n}\n\n/** @internal */\nexport interface ModelsTreeVisibilityHandlerProps {\n idsCache: ModelsTreeIdsCache;\n viewport: TreeWidgetViewport;\n alwaysAndNeverDrawnElementInfo: AlwaysAndNeverDrawnElementInfo;\n overrideHandler: HierarchyVisibilityOverrideHandler;\n overrides?: ModelsTreeVisibilityHandlerOverrides;\n}\n\n/**\n * Handles visibility status of models tree nodes.\n *\n * It knows how to get and change visibility status of nodes created by hierarchy definition.\n * @internal\n */\nexport class ModelsTreeVisibilityHandler implements Disposable, TreeSpecificVisibilityHandler<ModelsTreeSearchTargets> {\n #visibilityHelper: ModelsTreeVisibilityHelper;\n readonly #props: ModelsTreeVisibilityHandlerProps;\n\n constructor(constructorProps: ModelsTreeVisibilityHandlerProps) {\n this.#props = constructorProps;\n // Remove after https://github.com/iTwin/viewer-components-react/issues/1421.\n // We won't need to create a custom base ids cache.\n const baseIdsCache: BaseIdsCache = {\n getCategories: (props) => this.getCategories(props),\n getElementsCount: (props) => this.getElementsCount(props),\n getModels: (props) => this.getModels(props),\n getSubCategories: (props) => this.getSubCategories(props),\n getSubModels: (props) => this.getSubModels(props),\n hasSubModel: (props) => this.#props.idsCache.hasSubModel(props),\n getAllCategories: () => this.getAllCategories(),\n };\n this.#visibilityHelper = new ModelsTreeVisibilityHelper({\n viewport: this.#props.viewport,\n idsCache: this.#props.idsCache,\n alwaysAndNeverDrawnElementInfo: this.#props.alwaysAndNeverDrawnElementInfo,\n overrideHandler: this.#props.overrideHandler,\n baseIdsCache,\n overrides: this.#props.overrides,\n });\n }\n\n public [Symbol.dispose]() {\n this.#visibilityHelper[Symbol.dispose]();\n }\n\n public changeSearchTargetsVisibilityStatus(targets: ModelsTreeSearchTargets, on: boolean): Observable<void> {\n return defer(() => {\n const { subjectIds, modelIds, categories, elements } = targets;\n const observables = new Array<Observable<void>>();\n if (subjectIds?.size) {\n observables.push(this.#visibilityHelper.changeSubjectsVisibilityStatus({ subjectIds, on }));\n }\n\n if (modelIds?.size) {\n observables.push(this.#visibilityHelper.changeModelsVisibilityStatus({ modelIds, on }));\n }\n\n if (categories?.length) {\n observables.push(\n from(categories).pipe(\n mergeMap(({ modelId, categoryIds }) =>\n this.#visibilityHelper.changeCategoriesVisibilityStatus({\n categoryIds,\n modelId,\n on,\n }),\n ),\n ),\n );\n }\n\n if (elements?.length) {\n observables.push(\n fromWithRelease({ source: elements, releaseOnCount: 50 }).pipe(\n mergeMap(({ modelId, elements: elementsMap, categoryId }) =>\n this.#visibilityHelper.changeElementsVisibilityStatus({ modelId, categoryId, elementIds: [...elementsMap.keys()], on }),\n ),\n ),\n );\n }\n\n return merge(...observables);\n });\n }\n\n public getVisibilityStatus(node: HierarchyNode): Observable<VisibilityStatus> {\n if (HierarchyNode.isClassGroupingNode(node)) {\n const nodeInfo = this.getGroupingNodeInfo(node);\n const result = this.#visibilityHelper.getGroupedElementsVisibilityStatus({\n categoryId: nodeInfo.categoryId,\n modelId: nodeInfo.modelId,\n elementIds: nodeInfo.elementIds,\n });\n return this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: { node },\n nonOverriddenResult: result,\n override: this.#props.overrides?.getElementGroupingNodeVisibilityStatus,\n });\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n // note: subject nodes may be merged to represent multiple subject instances\n return this.#visibilityHelper.getSubjectsVisibilityStatus({ subjectIds: node.key.instanceKeys.map((key) => key.id) });\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.#visibilityHelper.getModelsVisibilityStatus({ modelIds: node.key.instanceKeys.map(({ id }) => id), type: \"GeometricModel3d\" });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n if (!modelId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.#visibilityHelper.getCategoriesVisibilityStatus({\n categoryIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n type: \"SpatialCategory\",\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n return this.#visibilityHelper.getElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n categoryId,\n type: \"GeometricElement3d\",\n });\n }\n\n /** Changes visibility of the items represented by the tree node. */\n public changeVisibilityStatus(node: HierarchyNode, on: boolean): Observable<void> {\n const changeObs = defer(() => {\n if (HierarchyNode.isClassGroupingNode(node)) {\n const nodeInfo = this.getGroupingNodeInfo(node);\n const result = this.#visibilityHelper.changeGroupedElementsVisibilityStatus({\n categoryId: nodeInfo.categoryId,\n modelId: nodeInfo.modelId,\n elementIds: nodeInfo.elementIds,\n on,\n });\n return this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: { node, on },\n nonOverriddenResult: result,\n override: this.#props.overrides?.changeElementGroupingNodeVisibilityStatus,\n });\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n return this.#visibilityHelper.changeSubjectsVisibilityStatus({\n subjectIds: node.key.instanceKeys.map((key) => key.id),\n on,\n });\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.#visibilityHelper.changeModelsVisibilityStatus({ modelIds: node.key.instanceKeys.map(({ id }) => id), on });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n if (!modelId) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.#visibilityHelper.changeCategoriesVisibilityStatus({\n categoryIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n on,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return EMPTY;\n }\n\n return this.#visibilityHelper.changeElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n categoryId,\n on,\n });\n });\n\n if (this.#props.viewport.isAlwaysDrawnExclusive) {\n return concat(this.#visibilityHelper.removeAlwaysDrawnExclusive(), changeObs);\n }\n return changeObs;\n }\n\n public getSearchTargetsVisibilityStatus(targets: ModelsTreeSearchTargets): Observable<VisibilityStatus> {\n return defer(() => {\n const { subjectIds, modelIds, categories, elements } = targets;\n const observables = new Array<Observable<VisibilityStatus>>();\n if (subjectIds?.size) {\n observables.push(this.#visibilityHelper.getSubjectsVisibilityStatus({ subjectIds }));\n }\n\n if (modelIds?.size) {\n observables.push(this.#visibilityHelper.getModelsVisibilityStatus({ modelIds, type: \"GeometricModel3d\" }));\n }\n\n if (categories?.length) {\n observables.push(\n from(categories).pipe(\n mergeMap(({ modelId, categoryIds }) =>\n this.#visibilityHelper.getCategoriesVisibilityStatus({\n categoryIds,\n modelId,\n type: \"SpatialCategory\",\n }),\n ),\n ),\n );\n }\n\n if (elements?.length) {\n observables.push(\n fromWithRelease({ source: elements, releaseOnCount: 50 }).pipe(\n mergeMap(({ modelId, elements: elementsMap, categoryId }) =>\n this.#visibilityHelper.getElementsVisibilityStatus({ modelId, categoryId, elementIds: [...elementsMap.keys()], type: \"GeometricElement3d\" }),\n ),\n ),\n );\n }\n\n return merge(...observables);\n }).pipe(mergeVisibilityStatuses);\n }\n\n private getCategories(props: Parameters<BaseIdsCache[\"getCategories\"]>[0]): ReturnType<BaseIdsCache[\"getCategories\"]> {\n return from(Id64.iterable(props.modelIds)).pipe(\n mergeMap((modelId) => this.#props.idsCache.getModelCategoryIds(modelId).pipe(map((categoryIds) => ({ id: modelId, spatialCategories: categoryIds })))),\n );\n }\n\n private getAllCategories(): ReturnType<BaseIdsCache[\"getAllCategories\"]> {\n return this.#props.idsCache.getAllCategories().pipe(map((categories) => ({ spatialCategories: categories })));\n }\n\n private getElementsCount(props: Parameters<BaseIdsCache[\"getElementsCount\"]>[0]): ReturnType<BaseIdsCache[\"getElementsCount\"]> {\n return this.#props.idsCache.getCategoryElementsCount(props.modelId, props.categoryId);\n }\n\n private getModels(props: Parameters<BaseIdsCache[\"getModels\"]>[0]): ReturnType<BaseIdsCache[\"getModels\"]> {\n return this.#props.idsCache.getCategoriesElementModels(props.categoryIds);\n }\n\n private getSubCategories(props: Parameters<BaseIdsCache[\"getSubCategories\"]>[0]): ReturnType<BaseIdsCache[\"getSubCategories\"]> {\n return this.#props.idsCache.getSubCategories(props.categoryId);\n }\n\n private getSubModels(props: Parameters<BaseIdsCache[\"getSubModels\"]>[0]): ReturnType<BaseIdsCache[\"getSubModels\"]> {\n if (\"modelIds\" in props) {\n return from(Id64.iterable(props.modelIds)).pipe(\n mergeMap((modelId) => {\n if (props.categoryId) {\n return this.#props.idsCache.getCategoriesModeledElements(modelId, props.categoryId).pipe(map((subModels) => ({ id: modelId, subModels })));\n }\n return this.#props.idsCache.getModelCategoryIds(modelId).pipe(\n mergeMap((categoryIds) => this.#props.idsCache.getCategoriesModeledElements(modelId, categoryIds)),\n map((subModels) => ({ id: modelId, subModels })),\n );\n }),\n );\n }\n\n if (props.modelId) {\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n this.#props.idsCache.getCategoriesModeledElements(props.modelId!, categoryId).pipe(map((subModels) => ({ id: categoryId, subModels }))),\n ),\n );\n }\n\n return this.#props.idsCache.getCategoriesElementModels(props.categoryIds).pipe(\n mergeMap(({ id, models }) => {\n if (!models) {\n return of({ id, subModels: undefined });\n }\n return from(models).pipe(\n mergeMap((modelId) => this.#props.idsCache.getCategoriesModeledElements(modelId, id)),\n map((subModels) => ({ id, subModels })),\n );\n }),\n );\n }\n\n private getGroupingNodeInfo(node: GroupingHierarchyNode) {\n const modelId = ModelsTreeNode.getModelId(node);\n const categoryId = ModelsTreeNode.getCategoryId(node);\n assert(!!modelId && !!categoryId);\n\n const elementIds = node.groupedInstanceKeys.map((key) => key.id);\n return { modelId, categoryId, elementIds };\n }\n}\n\n/**\n * Creates models tree visibility handler. Is used by integration and performance tests.\n * @internal\n */\nexport function createModelsTreeVisibilityHandler(props: {\n viewport: TreeWidgetViewport;\n idsCache: ModelsTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n overrides?: ModelsTreeVisibilityHandlerOverrides;\n searchPaths?: HierarchySearchPath[];\n}) {\n return new HierarchyVisibilityHandlerImpl<ModelsTreeSearchTargets>({\n getSearchResultsTree: (): undefined | Promise<SearchResultsTree<ModelsTreeSearchTargets>> => {\n if (!props.searchPaths) {\n return undefined;\n }\n return createModelsSearchResultsTree({\n searchPaths: props.searchPaths,\n imodelAccess: props.imodelAccess,\n });\n },\n getTreeSpecificVisibilityHandler: (info, overrideHandler) => {\n return new ModelsTreeVisibilityHandler({\n alwaysAndNeverDrawnElementInfo: info,\n idsCache: props.idsCache,\n viewport: props.viewport,\n overrideHandler,\n overrides: props.overrides,\n });\n },\n viewport: props.viewport,\n componentId: Guid.createValue(),\n });\n}\n"]}
@@ -1,10 +1,10 @@
1
1
  import type { Id64Set, Id64String } from "@itwin/core-bentley";
2
- import type { HierarchyFilteringPath } from "@itwin/presentation-hierarchies";
2
+ import type { HierarchySearchPath } from "@itwin/presentation-hierarchies";
3
3
  import type { ECClassHierarchyInspector } from "@itwin/presentation-shared";
4
4
  import type { ElementId } from "../../../common/internal/Types.js";
5
- import type { FilteredTree } from "../../../common/internal/visibility/BaseFilteredTree.js";
5
+ import type { SearchResultsTree } from "../../../common/internal/visibility/BaseSearchResultsTree.js";
6
6
  /** @internal */
7
- export interface ModelsTreeFilterTargets {
7
+ export interface ModelsTreeSearchTargets {
8
8
  subjectIds?: Id64Set;
9
9
  modelIds?: Id64Set;
10
10
  categories?: Array<{
@@ -15,13 +15,13 @@ export interface ModelsTreeFilterTargets {
15
15
  modelId: Id64String;
16
16
  categoryId: Id64String;
17
17
  elements: Map<ElementId, {
18
- isFilterTarget: boolean;
18
+ isSearchTarget: boolean;
19
19
  }>;
20
20
  }>;
21
21
  }
22
22
  /** @internal */
23
- export declare function createFilteredModelsTree(props: {
23
+ export declare function createModelsSearchResultsTree(props: {
24
24
  imodelAccess: ECClassHierarchyInspector;
25
- filteringPaths: HierarchyFilteringPath[];
26
- }): Promise<FilteredTree<ModelsTreeFilterTargets>>;
27
- //# sourceMappingURL=FilteredTree.d.ts.map
25
+ searchPaths: HierarchySearchPath[];
26
+ }): Promise<SearchResultsTree<ModelsTreeSearchTargets>>;
27
+ //# sourceMappingURL=SearchResultsTree.d.ts.map