@itwin/tree-widget-react 0.6.2 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/lib/cjs/TreeWidget.js +1 -1
  2. package/lib/cjs/TreeWidget.js.map +1 -1
  3. package/lib/cjs/components/IconButton.js +3 -3
  4. package/lib/cjs/components/IconButton.js.map +1 -1
  5. package/lib/cjs/components/TreeFilteringState.js +4 -4
  6. package/lib/cjs/components/TreeFilteringState.js.map +1 -1
  7. package/lib/cjs/components/TreeWidgetComponent.d.ts +1 -1
  8. package/lib/cjs/components/TreeWidgetComponent.js +5 -5
  9. package/lib/cjs/components/TreeWidgetComponent.js.map +1 -1
  10. package/lib/cjs/components/TreeWidgetComponent.scss +1 -1
  11. package/lib/cjs/components/TreeWidgetUiItemsProvider.d.ts +4 -5
  12. package/lib/cjs/components/TreeWidgetUiItemsProvider.js +19 -14
  13. package/lib/cjs/components/TreeWidgetUiItemsProvider.js.map +1 -1
  14. package/lib/cjs/components/search-bar/SearchBar.d.ts +0 -3
  15. package/lib/cjs/components/search-bar/SearchBar.js +17 -28
  16. package/lib/cjs/components/search-bar/SearchBar.js.map +1 -1
  17. package/lib/cjs/components/search-bar/SearchBar.scss +18 -34
  18. package/lib/cjs/components/search-bar/SearchBox.js +1 -1
  19. package/lib/cjs/components/search-bar/SearchBox.js.map +1 -1
  20. package/lib/cjs/components/trees/CategoriesVisibilityUtils.d.ts +4 -5
  21. package/lib/cjs/components/trees/CategoriesVisibilityUtils.js +6 -9
  22. package/lib/cjs/components/trees/CategoriesVisibilityUtils.js.map +1 -1
  23. package/lib/cjs/components/trees/IModelContentTree.js +4 -4
  24. package/lib/cjs/components/trees/IModelContentTree.js.map +1 -1
  25. package/lib/cjs/components/trees/VisibilityTreeEventHandler.d.ts +4 -5
  26. package/lib/cjs/components/trees/VisibilityTreeEventHandler.js +17 -9
  27. package/lib/cjs/components/trees/VisibilityTreeEventHandler.js.map +1 -1
  28. package/lib/cjs/components/trees/VisibilityTreeRenderer.d.ts +4 -4
  29. package/lib/cjs/components/trees/VisibilityTreeRenderer.js +2 -2
  30. package/lib/cjs/components/trees/VisibilityTreeRenderer.js.map +1 -1
  31. package/lib/cjs/components/trees/category-tree/CategoriesTree.d.ts +9 -5
  32. package/lib/cjs/components/trees/category-tree/CategoriesTree.js +7 -8
  33. package/lib/cjs/components/trees/category-tree/CategoriesTree.js.map +1 -1
  34. package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.d.ts +7 -2
  35. package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js +64 -31
  36. package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js.map +1 -1
  37. package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.d.ts +9 -9
  38. package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.js +8 -8
  39. package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.js.map +1 -1
  40. package/lib/cjs/components/trees/models-tree/ModelsTree.d.ts +5 -7
  41. package/lib/cjs/components/trees/models-tree/ModelsTree.js +7 -7
  42. package/lib/cjs/components/trees/models-tree/ModelsTree.js.map +1 -1
  43. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.d.ts +19 -2
  44. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js +112 -74
  45. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  46. package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.d.ts +6 -8
  47. package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.js.map +1 -1
  48. package/lib/cjs/components/trees/spatial-tree/SpatialTreeComponent.js +9 -7
  49. package/lib/cjs/components/trees/spatial-tree/SpatialTreeComponent.js.map +1 -1
  50. package/lib/cjs/components/utils/AutoSizer.js +4 -4
  51. package/lib/cjs/components/utils/AutoSizer.js.map +1 -1
  52. package/lib/cjs/tree-widget-react.d.ts +0 -1
  53. package/lib/cjs/tree-widget-react.js +0 -1
  54. package/lib/cjs/tree-widget-react.js.map +1 -1
  55. package/lib/cjs/types.d.ts +19 -5
  56. package/lib/cjs/types.js +4 -0
  57. package/lib/cjs/types.js.map +1 -1
  58. package/lib/esm/components/TreeWidgetComponent.d.ts +1 -1
  59. package/lib/esm/components/TreeWidgetComponent.js +1 -1
  60. package/lib/esm/components/TreeWidgetComponent.js.map +1 -1
  61. package/lib/esm/components/TreeWidgetComponent.scss +1 -1
  62. package/lib/esm/components/TreeWidgetUiItemsProvider.d.ts +4 -5
  63. package/lib/esm/components/TreeWidgetUiItemsProvider.js +13 -8
  64. package/lib/esm/components/TreeWidgetUiItemsProvider.js.map +1 -1
  65. package/lib/esm/components/search-bar/SearchBar.d.ts +0 -3
  66. package/lib/esm/components/search-bar/SearchBar.js +14 -25
  67. package/lib/esm/components/search-bar/SearchBar.js.map +1 -1
  68. package/lib/esm/components/search-bar/SearchBar.scss +18 -34
  69. package/lib/esm/components/trees/CategoriesVisibilityUtils.d.ts +4 -5
  70. package/lib/esm/components/trees/CategoriesVisibilityUtils.js +4 -7
  71. package/lib/esm/components/trees/CategoriesVisibilityUtils.js.map +1 -1
  72. package/lib/esm/components/trees/VisibilityTreeEventHandler.d.ts +4 -5
  73. package/lib/esm/components/trees/VisibilityTreeEventHandler.js +13 -5
  74. package/lib/esm/components/trees/VisibilityTreeEventHandler.js.map +1 -1
  75. package/lib/esm/components/trees/VisibilityTreeRenderer.d.ts +4 -4
  76. package/lib/esm/components/trees/VisibilityTreeRenderer.js +1 -1
  77. package/lib/esm/components/trees/VisibilityTreeRenderer.js.map +1 -1
  78. package/lib/esm/components/trees/category-tree/CategoriesTree.d.ts +9 -5
  79. package/lib/esm/components/trees/category-tree/CategoriesTree.js +2 -3
  80. package/lib/esm/components/trees/category-tree/CategoriesTree.js.map +1 -1
  81. package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.d.ts +7 -2
  82. package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js +63 -30
  83. package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js.map +1 -1
  84. package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.d.ts +9 -9
  85. package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.js +4 -4
  86. package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.js.map +1 -1
  87. package/lib/esm/components/trees/models-tree/ModelsTree.d.ts +5 -7
  88. package/lib/esm/components/trees/models-tree/ModelsTree.js.map +1 -1
  89. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.d.ts +19 -2
  90. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js +107 -69
  91. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  92. package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.d.ts +6 -8
  93. package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.js.map +1 -1
  94. package/lib/esm/components/trees/spatial-tree/SpatialTreeComponent.js +4 -2
  95. package/lib/esm/components/trees/spatial-tree/SpatialTreeComponent.js.map +1 -1
  96. package/lib/esm/tree-widget-react.d.ts +0 -1
  97. package/lib/esm/tree-widget-react.js +0 -1
  98. package/lib/esm/tree-widget-react.js.map +1 -1
  99. package/lib/esm/types.d.ts +19 -5
  100. package/lib/esm/types.js +4 -0
  101. package/lib/esm/types.js.map +1 -1
  102. package/package.json +32 -40
  103. package/lib/cjs/components/header/TreeHeader.d.ts +0 -15
  104. package/lib/cjs/components/header/TreeHeader.js +0 -43
  105. package/lib/cjs/components/header/TreeHeader.js.map +0 -1
  106. package/lib/cjs/components/header/TreeHeader.scss +0 -20
  107. package/lib/cjs/components/search-bar/Popup.d.ts +0 -50
  108. package/lib/cjs/components/search-bar/Popup.js +0 -246
  109. package/lib/cjs/components/search-bar/Popup.js.map +0 -1
  110. package/lib/cjs/components/search-bar/Popup.scss +0 -316
  111. package/lib/esm/components/header/TreeHeader.d.ts +0 -15
  112. package/lib/esm/components/header/TreeHeader.js +0 -20
  113. package/lib/esm/components/header/TreeHeader.js.map +0 -1
  114. package/lib/esm/components/header/TreeHeader.scss +0 -20
  115. package/lib/esm/components/search-bar/Popup.d.ts +0 -50
  116. package/lib/esm/components/search-bar/Popup.js +0 -220
  117. package/lib/esm/components/search-bar/Popup.js.map +0 -1
  118. package/lib/esm/components/search-bar/Popup.scss +0 -316
@@ -24,27 +24,36 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.ModelsTreeComponent = void 0;
27
+ require("./ModelsTree.scss");
27
28
  const react_1 = __importStar(require("react"));
28
- const core_frontend_1 = require("@itwin/core-frontend");
29
29
  const appui_react_1 = require("@itwin/appui-react");
30
+ const core_frontend_1 = require("@itwin/core-frontend");
30
31
  const TreeFilteringState_1 = require("../../TreeFilteringState");
31
- require("./ModelsTree.scss");
32
- const TreeHeader_1 = require("../../header/TreeHeader");
33
32
  const AutoSizer_1 = require("../../utils/AutoSizer");
34
- const ModelsTree_1 = require("./ModelsTree");
35
33
  const CategoriesVisibilityUtils_1 = require("../CategoriesVisibilityUtils");
34
+ const ModelsTree_1 = require("./ModelsTree");
35
+ const IconButton_1 = require("../../IconButton");
36
+ const TreeWidget_1 = require("../../../TreeWidget");
37
+ const SearchBar_1 = require("../../search-bar/SearchBar");
36
38
  const ModelsTreeComponent = (props) => {
37
- const [is2dToggleActive, setIs2dToggleActive] = react_1.useState(false);
38
- const [is3dToggleActive, setIs3dToggleActive] = react_1.useState(false);
39
- const [icon2dToggle, setIcon2dToggle] = react_1.useState("icon-visibility");
40
- const [icon3dToggle, setIcon3dToggle] = react_1.useState("icon-visibility");
41
- const [available2dModels, setAvailable2dModels] = react_1.useState([]);
42
- const [available3dModels, setAvailable3dModels] = react_1.useState([]);
43
- const [availableModels, setAvailableModels] = react_1.useState([]);
44
- const iModel = appui_react_1.useActiveIModelConnection();
45
- const viewport = appui_react_1.useActiveViewport();
46
- const { searchOptions, filterString, activeMatchIndex, onFilterApplied } = TreeFilteringState_1.useTreeFilteringState();
47
- const queryModels = react_1.useCallback(async (vp) => {
39
+ const iModel = (0, appui_react_1.useActiveIModelConnection)();
40
+ const viewport = (0, appui_react_1.useActiveViewport)();
41
+ if (!iModel || !viewport)
42
+ return null;
43
+ return (react_1.default.createElement(ModelsTreeComponentImpl, { ...props, iModel: iModel, viewport: viewport }));
44
+ };
45
+ exports.ModelsTreeComponent = ModelsTreeComponent;
46
+ exports.ModelsTreeComponent.ShowAllButton = ShowAllButton;
47
+ exports.ModelsTreeComponent.HideAllButton = HideAllButton;
48
+ exports.ModelsTreeComponent.InvertButton = InvertButton;
49
+ exports.ModelsTreeComponent.View2DButton = View2DButton;
50
+ exports.ModelsTreeComponent.View3DButton = View3DButton;
51
+ function ModelsTreeComponentImpl(props) {
52
+ var _a;
53
+ const [availableModels, setAvailableModels] = (0, react_1.useState)([]);
54
+ const { viewport, iModel } = props;
55
+ const { searchOptions, filterString, activeMatchIndex, onFilterApplied } = (0, TreeFilteringState_1.useTreeFilteringState)();
56
+ const queryModels = (0, react_1.useCallback)(async (vp) => {
48
57
  var _a;
49
58
  if (vp === undefined)
50
59
  return [];
@@ -52,87 +61,116 @@ const ModelsTreeComponent = (props) => {
52
61
  from: "BisCore.GeometricModel3d",
53
62
  wantPrivate: false,
54
63
  };
55
- const modelProps = (_a = await (iModel === null || iModel === void 0 ? void 0 : iModel.models.queryProps(queryParams))) !== null && _a !== void 0 ? _a : [];
64
+ const modelProps = (_a = await iModel.models.queryProps(queryParams)) !== null && _a !== void 0 ? _a : [];
56
65
  return modelProps
57
66
  .map(({ id, isPlanProjection }) => ({ id, isPlanProjection }))
58
67
  .filter(({ id }) => id);
59
68
  }, [iModel]);
60
- react_1.useEffect(() => {
69
+ (0, react_1.useEffect)(() => {
61
70
  queryModels(viewport)
62
71
  .then((modelInfos) => {
63
- setAvailableModels(modelInfos.map(({ id }) => id));
64
- const { models2d, models3d } = modelInfos.reduce((acc, { id, isPlanProjection }) => {
65
- isPlanProjection ? acc.models2d.push(id) : acc.models3d.push(id);
66
- return acc;
67
- }, { models2d: [], models3d: [] });
68
- setAvailable2dModels(models2d);
69
- setAvailable3dModels(models3d);
72
+ setAvailableModels(modelInfos);
70
73
  })
71
74
  .catch((_e) => {
72
75
  setAvailableModels([]);
73
76
  });
74
77
  }, [queryModels, viewport]);
75
- const invert = react_1.useCallback(async () => {
76
- if (availableModels.length === 0)
78
+ return (react_1.default.createElement(react_1.default.Fragment, null,
79
+ react_1.default.createElement(SearchBar_1.SearchBar, { value: "", valueChangedDelay: 500, placeholder: TreeWidget_1.TreeWidget.translate("search"), title: TreeWidget_1.TreeWidget.translate("searchForSomething"), filteringInProgress: searchOptions.isFiltering, onFilterCancel: searchOptions.onFilterCancel, onFilterClear: searchOptions.onFilterCancel, onFilterStart: searchOptions.onFilterStart, onSelectedChanged: searchOptions.onResultSelectedChanged, resultCount: (_a = searchOptions.matchedResultCount) !== null && _a !== void 0 ? _a : 0 }, props.headerButtons
80
+ ? props.headerButtons.map((btn, index) => react_1.default.createElement(react_1.default.Fragment, { key: index }, btn({ viewport, models: availableModels })))
81
+ : [
82
+ react_1.default.createElement(ShowAllButton, { viewport: viewport, models: availableModels, key: "show-all-btn" }),
83
+ react_1.default.createElement(HideAllButton, { viewport: viewport, models: availableModels, key: "hide-all-btn" }),
84
+ react_1.default.createElement(InvertButton, { viewport: viewport, models: availableModels, key: "invert-all-btn" }),
85
+ react_1.default.createElement(View2DButton, { viewport: viewport, models: availableModels, key: "view-2d-btn" }),
86
+ react_1.default.createElement(View3DButton, { viewport: viewport, models: availableModels, key: "view-3d-btn" }),
87
+ ]),
88
+ react_1.default.createElement(AutoSizer_1.AutoSizer, null, ({ width, height }) => (react_1.default.createElement(ModelsTree_1.ModelsTree, { ...props, iModel: iModel, activeView: viewport, width: width, height: height, filterInfo: { filter: filterString, activeMatchIndex }, onFilterApplied: onFilterApplied })))));
89
+ }
90
+ function ShowAllButton(props) {
91
+ const showAll = async () => {
92
+ if (!props.viewport)
77
93
  return;
94
+ await props.viewport.addViewedModels(props.models.map((model) => model.id));
95
+ props.viewport.clearNeverDrawn();
96
+ props.viewport.clearAlwaysDrawn();
97
+ if (props.viewport.iModel) {
98
+ await (0, CategoriesVisibilityUtils_1.toggleAllCategories)(core_frontend_1.IModelApp.viewManager, props.viewport.iModel, true, props.viewport, false);
99
+ }
100
+ props.viewport.invalidateScene();
101
+ };
102
+ return (react_1.default.createElement(IconButton_1.IconButton, { className: "tree-widget-header-tree-toolbar-icon", icon: "icon-visibility", title: TreeWidget_1.TreeWidget.translate("showAll"), onClick: showAll }));
103
+ }
104
+ function HideAllButton(props) {
105
+ const hideAll = async () => {
106
+ props.viewport.changeModelDisplay(props.models.map((model) => model.id), false);
107
+ props.viewport.clearAlwaysDrawn();
108
+ if (props.viewport.iModel) {
109
+ await (0, CategoriesVisibilityUtils_1.toggleAllCategories)(core_frontend_1.IModelApp.viewManager, props.viewport.iModel, false, props.viewport, false);
110
+ }
111
+ props.viewport.invalidateScene();
112
+ };
113
+ return (react_1.default.createElement(IconButton_1.IconButton, { className: "tree-widget-header-tree-toolbar-icon", icon: "icon-visibility-hide-2", title: TreeWidget_1.TreeWidget.translate("hideAll"), onClick: hideAll }));
114
+ }
115
+ function InvertButton(props) {
116
+ const invert = async () => {
78
117
  const notViewedModels = [];
79
118
  const models = [];
80
- availableModels.forEach((id) => {
81
- if (viewport === null || viewport === void 0 ? void 0 : viewport.viewsModel(id))
82
- models.push(id);
119
+ props.models.forEach((model) => {
120
+ if (props.viewport.viewsModel(model.id))
121
+ models.push(model.id);
83
122
  else
84
- notViewedModels.push(id);
123
+ notViewedModels.push(model.id);
85
124
  });
86
- await (viewport === null || viewport === void 0 ? void 0 : viewport.addViewedModels(notViewedModels));
87
- viewport === null || viewport === void 0 ? void 0 : viewport.changeModelDisplay(models, false);
88
- viewport === null || viewport === void 0 ? void 0 : viewport.invalidateScene();
89
- }, [viewport, availableModels]);
90
- const hideAll = react_1.useCallback(async () => {
91
- viewport === null || viewport === void 0 ? void 0 : viewport.changeModelDisplay(availableModels, false);
92
- viewport === null || viewport === void 0 ? void 0 : viewport.clearAlwaysDrawn();
93
- if (iModel) {
94
- await CategoriesVisibilityUtils_1.toggleAllCategories(core_frontend_1.IModelApp.viewManager, iModel, false, viewport, false, undefined);
95
- }
96
- viewport === null || viewport === void 0 ? void 0 : viewport.invalidateScene();
97
- }, [viewport, availableModels, iModel]);
98
- const showAll = react_1.useCallback(async () => {
99
- await (viewport === null || viewport === void 0 ? void 0 : viewport.addViewedModels(availableModels));
100
- viewport === null || viewport === void 0 ? void 0 : viewport.clearNeverDrawn();
101
- if (iModel) {
102
- await CategoriesVisibilityUtils_1.toggleAllCategories(core_frontend_1.IModelApp.viewManager, iModel, true, viewport, false, undefined);
103
- }
104
- viewport === null || viewport === void 0 ? void 0 : viewport.invalidateScene();
105
- }, [viewport, availableModels, iModel]);
106
- const viewToggle2D = react_1.useCallback(async () => {
125
+ await props.viewport.addViewedModels(notViewedModels);
126
+ props.viewport.changeModelDisplay(models, false);
127
+ props.viewport.invalidateScene();
128
+ };
129
+ return (react_1.default.createElement(IconButton_1.IconButton, { className: "tree-widget-header-tree-toolbar-icon", title: TreeWidget_1.TreeWidget.translate("invert"), icon: "icon-visibility-invert", onClick: invert }));
130
+ }
131
+ function View2DButton(props) {
132
+ const models2d = (0, react_1.useMemo)(() => {
133
+ return props.models.filter((model) => model.isPlanProjection).map((model) => model.id);
134
+ }, [props.models]);
135
+ const [is2dToggleActive, setIs2dToggleActive] = (0, react_1.useState)(() => areAllModelsVisible(props.viewport, models2d));
136
+ (0, react_1.useEffect)(() => {
137
+ return props.viewport.onViewedModelsChanged.addListener(() => setIs2dToggleActive(areAllModelsVisible(props.viewport, models2d)));
138
+ }, [models2d, props.viewport]);
139
+ const viewToggle2D = async () => {
140
+ if (!models2d)
141
+ return;
107
142
  if (is2dToggleActive) {
108
- viewport === null || viewport === void 0 ? void 0 : viewport.changeModelDisplay(available2dModels, false);
109
- setIs2dToggleActive(false);
110
- setIcon2dToggle("icon-visibility-hide-2");
143
+ props.viewport.changeModelDisplay(models2d, false);
111
144
  }
112
145
  else {
113
- await (viewport === null || viewport === void 0 ? void 0 : viewport.addViewedModels(available2dModels));
114
- setIs2dToggleActive(true);
115
- setIcon2dToggle("icon-visibility");
146
+ await props.viewport.addViewedModels(models2d);
116
147
  }
117
- viewport === null || viewport === void 0 ? void 0 : viewport.invalidateScene();
118
- }, [is2dToggleActive, viewport, available2dModels]);
119
- const viewToggle3D = react_1.useCallback(async () => {
148
+ props.viewport.invalidateScene();
149
+ };
150
+ return (react_1.default.createElement(IconButton_1.IconButton, { className: "tree-widget-header-tree-toolbar-icon", icon: is2dToggleActive ? "icon-visibility" : "icon-visibility-hide-2", title: TreeWidget_1.TreeWidget.translate("toggle2DViews"), onClick: viewToggle2D, label: TreeWidget_1.TreeWidget.translate("label2D"), disabled: models2d.length === 0 }));
151
+ }
152
+ function View3DButton(props) {
153
+ const models3d = (0, react_1.useMemo)(() => {
154
+ return props.models.filter((model) => !model.isPlanProjection).map((model) => model.id);
155
+ }, [props.models]);
156
+ const [is3dToggleActive, setIs3dToggleActive] = (0, react_1.useState)(() => areAllModelsVisible(props.viewport, models3d));
157
+ (0, react_1.useEffect)(() => {
158
+ return props.viewport.onViewedModelsChanged.addListener(() => setIs3dToggleActive(areAllModelsVisible(props.viewport, models3d)));
159
+ }, [models3d, props.viewport]);
160
+ const viewToggle3D = async () => {
161
+ if (!models3d)
162
+ return;
120
163
  if (is3dToggleActive) {
121
- viewport === null || viewport === void 0 ? void 0 : viewport.changeModelDisplay(available3dModels, false);
122
- setIs3dToggleActive(false);
123
- setIcon3dToggle("icon-visibility-hide-2");
164
+ props.viewport.changeModelDisplay(models3d, false);
124
165
  }
125
166
  else {
126
- await (viewport === null || viewport === void 0 ? void 0 : viewport.addViewedModels(available3dModels));
127
- setIs3dToggleActive(true);
128
- setIcon3dToggle("icon-visibility");
167
+ await props.viewport.addViewedModels(models3d);
129
168
  }
130
- viewport === null || viewport === void 0 ? void 0 : viewport.invalidateScene();
131
- }, [is3dToggleActive, viewport, available3dModels]);
132
- return (react_1.default.createElement(react_1.default.Fragment, null, iModel && viewport &&
133
- react_1.default.createElement(react_1.default.Fragment, null,
134
- react_1.default.createElement(TreeHeader_1.TreeHeaderComponent, { searchOptions: searchOptions, showAll: showAll, hideAll: hideAll, invert: invert, toggle2D: viewToggle2D, toggle2DIcon: icon2dToggle, toggle3D: viewToggle3D, toggle3DIcon: icon3dToggle }),
135
- react_1.default.createElement(AutoSizer_1.AutoSizer, null, ({ width, height }) => (react_1.default.createElement(ModelsTree_1.ModelsTree, { ...props, iModel: iModel, activeView: viewport, width: width, height: height, filterInfo: { filter: filterString, activeMatchIndex }, onFilterApplied: onFilterApplied }))))));
136
- };
137
- exports.ModelsTreeComponent = ModelsTreeComponent;
169
+ props.viewport.invalidateScene();
170
+ };
171
+ return (react_1.default.createElement(IconButton_1.IconButton, { className: "tree-widget-header-tree-toolbar-icon", icon: is3dToggleActive ? "icon-visibility" : "icon-visibility-hide-2", title: TreeWidget_1.TreeWidget.translate("toggle3DViews"), onClick: viewToggle3D, label: TreeWidget_1.TreeWidget.translate("label3D"), disabled: models3d.length === 0 }));
172
+ }
173
+ function areAllModelsVisible(viewport, models) {
174
+ return models.length !== 0 ? models.every((id) => viewport.viewsModel(id)) : false;
175
+ }
138
176
  //# sourceMappingURL=ModelsTreeComponent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModelsTreeComponent.js","sourceRoot":"","sources":["../../../../../src/components/trees/models-tree/ModelsTreeComponent.tsx"],"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 React, { useCallback, useEffect, useState } from \"react\";\nimport type { Viewport } from \"@itwin/core-frontend\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { useActiveIModelConnection, useActiveViewport } from \"@itwin/appui-react\";\nimport { useTreeFilteringState } from \"../../TreeFilteringState\";\nimport \"./ModelsTree.scss\";\nimport type {\n GeometricModel3dProps,\n ModelQueryParams,\n} from \"@itwin/core-common\";\nimport { TreeHeaderComponent } from \"../../header/TreeHeader\";\nimport type { ModelTreeProps } from \"../../../types\";\nimport { AutoSizer } from \"../../utils/AutoSizer\";\nimport { ModelsTree } from \"./ModelsTree\";\nimport { toggleAllCategories } from \"../CategoriesVisibilityUtils\";\n\ninterface TreeViewModelInfo {\n id: string;\n isPlanProjection?: boolean;\n}\n\nexport const ModelsTreeComponent = (props: ModelTreeProps) => {\n const [is2dToggleActive, setIs2dToggleActive] = useState<boolean>(false);\n const [is3dToggleActive, setIs3dToggleActive] = useState<boolean>(false);\n const [icon2dToggle, setIcon2dToggle] = useState<string>(\"icon-visibility\");\n const [icon3dToggle, setIcon3dToggle] = useState<string>(\"icon-visibility\");\n\n const [available2dModels, setAvailable2dModels] = useState<string[]>([]);\n const [available3dModels, setAvailable3dModels] = useState<string[]>([]);\n const [availableModels, setAvailableModels] = useState<string[]>([]);\n\n const iModel = useActiveIModelConnection();\n const viewport = useActiveViewport();\n\n const { searchOptions, filterString, activeMatchIndex, onFilterApplied } =\n useTreeFilteringState();\n\n const queryModels = useCallback(async (\n vp: Viewport | undefined\n ): Promise<TreeViewModelInfo[]> => {\n if (vp === undefined) return [];\n\n const queryParams: ModelQueryParams = {\n from: \"BisCore.GeometricModel3d\",\n wantPrivate: false,\n };\n const modelProps = await iModel?.models.queryProps(queryParams) ?? [];\n return modelProps\n .map(({ id, isPlanProjection }: GeometricModel3dProps) => ({ id, isPlanProjection }))\n .filter(({ id }) => id) as TreeViewModelInfo[];\n }, [iModel]);\n\n useEffect(() => {\n queryModels(viewport)\n .then((modelInfos: TreeViewModelInfo[]) => {\n setAvailableModels(modelInfos.map(({ id }) => id));\n\n const { models2d, models3d } = modelInfos.reduce((acc, { id, isPlanProjection }) => {\n isPlanProjection ? acc.models2d.push(id) : acc.models3d.push(id);\n return acc;\n }, { models2d: [] as string[], models3d: [] as string[] });\n\n setAvailable2dModels(models2d);\n setAvailable3dModels(models3d);\n })\n .catch((_e) => {\n setAvailableModels([]);\n });\n }, [queryModels, viewport]);\n\n const invert = useCallback(async () => {\n if (availableModels.length === 0) return;\n const notViewedModels: string[] = [];\n const models: string[] = [];\n availableModels.forEach((id: string) => {\n if (viewport?.viewsModel(id)) models.push(id);\n else notViewedModels.push(id);\n });\n await viewport?.addViewedModels(notViewedModels);\n viewport?.changeModelDisplay(models, false);\n viewport?.invalidateScene();\n }, [viewport, availableModels]);\n\n const hideAll = useCallback(async () => {\n viewport?.changeModelDisplay(availableModels, false);\n viewport?.clearAlwaysDrawn();\n if (iModel) {\n await toggleAllCategories(\n IModelApp.viewManager,\n iModel,\n false,\n viewport,\n false,\n undefined\n );\n }\n viewport?.invalidateScene();\n }, [viewport, availableModels, iModel]);\n\n const showAll = useCallback(async () => {\n await viewport?.addViewedModels(availableModels);\n viewport?.clearNeverDrawn();\n if (iModel) {\n await toggleAllCategories(\n IModelApp.viewManager,\n iModel,\n true,\n viewport,\n false,\n undefined\n );\n }\n viewport?.invalidateScene();\n }, [viewport, availableModels, iModel]);\n\n const viewToggle2D = useCallback(async () => {\n if (is2dToggleActive) {\n viewport?.changeModelDisplay(available2dModels, false);\n setIs2dToggleActive(false);\n setIcon2dToggle(\"icon-visibility-hide-2\");\n } else {\n await viewport?.addViewedModels(available2dModels);\n setIs2dToggleActive(true);\n setIcon2dToggle(\"icon-visibility\");\n }\n viewport?.invalidateScene();\n }, [is2dToggleActive, viewport, available2dModels]);\n\n const viewToggle3D = useCallback(async () => {\n if (is3dToggleActive) {\n viewport?.changeModelDisplay(available3dModels, false);\n setIs3dToggleActive(false);\n setIcon3dToggle(\"icon-visibility-hide-2\");\n } else {\n await viewport?.addViewedModels(available3dModels);\n setIs3dToggleActive(true);\n setIcon3dToggle(\"icon-visibility\");\n }\n viewport?.invalidateScene();\n }, [is3dToggleActive, viewport, available3dModels]);\n\n return (\n <>\n {iModel && viewport &&\n <>\n <TreeHeaderComponent\n searchOptions={searchOptions}\n showAll={showAll}\n hideAll={hideAll}\n invert={invert}\n toggle2D={viewToggle2D}\n toggle2DIcon={icon2dToggle}\n toggle3D={viewToggle3D}\n toggle3DIcon={icon3dToggle}\n />\n <AutoSizer>\n {({ width, height }) => (\n <ModelsTree\n {...props}\n iModel={iModel}\n activeView={viewport}\n width={width}\n height={height}\n filterInfo={{ filter: filterString, activeMatchIndex }}\n onFilterApplied={onFilterApplied}\n />\n )}\n </AutoSizer>\n </>\n }\n </>\n );\n};\n"]}
1
+ {"version":3,"file":"ModelsTreeComponent.js","sourceRoot":"","sources":["../../../../../src/components/trees/models-tree/ModelsTreeComponent.tsx"],"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 \"./ModelsTree.scss\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useActiveIModelConnection, useActiveViewport } from \"@itwin/appui-react\";\nimport { GeometricModel3dProps, ModelQueryParams } from \"@itwin/core-common\";\nimport { IModelApp, IModelConnection, ScreenViewport, Viewport } from \"@itwin/core-frontend\";\nimport { ModelsTreeHeaderButtonProps, ModelTreeProps } from \"../../../types\";\nimport { useTreeFilteringState } from \"../../TreeFilteringState\";\nimport { AutoSizer } from \"../../utils/AutoSizer\";\nimport { toggleAllCategories } from \"../CategoriesVisibilityUtils\";\nimport { ModelsTree } from \"./ModelsTree\";\nimport { IconButton } from \"../../IconButton\";\nimport { TreeWidget } from \"../../../TreeWidget\";\nimport { SearchBar } from \"../../search-bar/SearchBar\";\n\nexport interface ModelInfo {\n id: string;\n isPlanProjection?: boolean;\n}\n\nexport const ModelsTreeComponent = (props: ModelTreeProps) => {\n const iModel = useActiveIModelConnection();\n const viewport = useActiveViewport();\n\n if (!iModel || !viewport)\n return null;\n\n return (\n <ModelsTreeComponentImpl {...props} iModel={iModel} viewport={viewport} />\n );\n};\n\nModelsTreeComponent.ShowAllButton = ShowAllButton;\nModelsTreeComponent.HideAllButton = HideAllButton;\nModelsTreeComponent.InvertButton = InvertButton;\nModelsTreeComponent.View2DButton = View2DButton;\nModelsTreeComponent.View3DButton = View3DButton;\n\nfunction ModelsTreeComponentImpl(props: ModelTreeProps & { iModel: IModelConnection, viewport: ScreenViewport }) {\n const [availableModels, setAvailableModels] = useState<ModelInfo[]>([]);\n\n const { viewport, iModel } = props;\n\n const { searchOptions, filterString, activeMatchIndex, onFilterApplied } =\n useTreeFilteringState();\n\n const queryModels = useCallback(async (\n vp: Viewport | undefined\n ): Promise<ModelInfo[]> => {\n if (vp === undefined) return [];\n\n const queryParams: ModelQueryParams = {\n from: \"BisCore.GeometricModel3d\",\n wantPrivate: false,\n };\n const modelProps = await iModel.models.queryProps(queryParams) ?? [];\n return modelProps\n .map(({ id, isPlanProjection }: GeometricModel3dProps) => ({ id, isPlanProjection }))\n .filter(({ id }) => id) as ModelInfo[];\n }, [iModel]);\n\n useEffect(() => {\n queryModels(viewport)\n .then((modelInfos: ModelInfo[]) => {\n setAvailableModels(modelInfos);\n })\n .catch((_e) => {\n setAvailableModels([]);\n });\n }, [queryModels, viewport]);\n\n return (\n <>\n <SearchBar\n value=\"\"\n valueChangedDelay={500}\n placeholder={TreeWidget.translate(\"search\")}\n title={TreeWidget.translate(\"searchForSomething\")}\n filteringInProgress={searchOptions.isFiltering}\n onFilterCancel={searchOptions.onFilterCancel}\n onFilterClear={searchOptions.onFilterCancel}\n onFilterStart={searchOptions.onFilterStart}\n onSelectedChanged={searchOptions.onResultSelectedChanged}\n resultCount={searchOptions.matchedResultCount ?? 0}\n >\n {props.headerButtons\n ? props.headerButtons.map((btn, index) =>\n <React.Fragment key={index}>\n {btn({ viewport, models: availableModels })}\n </React.Fragment>)\n : [\n <ShowAllButton viewport={viewport} models={availableModels} key=\"show-all-btn\" />,\n <HideAllButton viewport={viewport} models={availableModels} key=\"hide-all-btn\" />,\n <InvertButton viewport={viewport} models={availableModels} key=\"invert-all-btn\" />,\n <View2DButton viewport={viewport} models={availableModels} key=\"view-2d-btn\" />,\n <View3DButton viewport={viewport} models={availableModels} key=\"view-3d-btn\" />,\n ]\n }\n </SearchBar>\n <AutoSizer>\n {({ width, height }) => (\n <ModelsTree\n {...props}\n iModel={iModel}\n activeView={viewport}\n width={width}\n height={height}\n filterInfo={{ filter: filterString, activeMatchIndex }}\n onFilterApplied={onFilterApplied}\n />\n )}\n </AutoSizer>\n </>\n );\n}\n\nfunction ShowAllButton(props: ModelsTreeHeaderButtonProps) {\n const showAll = async () => {\n if (!props.viewport)\n return;\n\n await props.viewport.addViewedModels(props.models.map((model) => model.id));\n props.viewport.clearNeverDrawn();\n props.viewport.clearAlwaysDrawn();\n if (props.viewport.iModel) {\n await toggleAllCategories(\n IModelApp.viewManager,\n props.viewport.iModel,\n true,\n props.viewport,\n false\n );\n }\n props.viewport.invalidateScene();\n };\n\n return (\n <IconButton\n className=\"tree-widget-header-tree-toolbar-icon\"\n icon=\"icon-visibility\"\n title={TreeWidget.translate(\"showAll\")}\n onClick={showAll}\n />\n );\n}\n\nfunction HideAllButton(props: ModelsTreeHeaderButtonProps) {\n const hideAll = async () => {\n props.viewport.changeModelDisplay(props.models.map((model) => model.id), false);\n props.viewport.clearAlwaysDrawn();\n if (props.viewport.iModel) {\n await toggleAllCategories(\n IModelApp.viewManager,\n props.viewport.iModel,\n false,\n props.viewport,\n false\n );\n }\n props.viewport.invalidateScene();\n };\n\n return (\n <IconButton\n className=\"tree-widget-header-tree-toolbar-icon\"\n icon=\"icon-visibility-hide-2\"\n title={TreeWidget.translate(\"hideAll\")}\n onClick={hideAll}\n />\n );\n}\n\nfunction InvertButton(props: ModelsTreeHeaderButtonProps) {\n const invert = async () => {\n const notViewedModels: string[] = [];\n const models: string[] = [];\n props.models.forEach((model) => {\n if (props.viewport.viewsModel(model.id)) models.push(model.id);\n else notViewedModels.push(model.id);\n });\n await props.viewport.addViewedModels(notViewedModels);\n props.viewport.changeModelDisplay(models, false);\n props.viewport.invalidateScene();\n };\n\n return (\n <IconButton\n className=\"tree-widget-header-tree-toolbar-icon\"\n title={TreeWidget.translate(\"invert\")}\n icon=\"icon-visibility-invert\"\n onClick={invert}\n />\n );\n}\n\nfunction View2DButton(props: ModelsTreeHeaderButtonProps) {\n const models2d = useMemo(() => {\n return props.models.filter((model) => model.isPlanProjection).map((model) => model.id);\n }, [props.models]);\n\n const [is2dToggleActive, setIs2dToggleActive] = useState(() => areAllModelsVisible(props.viewport, models2d));\n\n useEffect(() => {\n return props.viewport.onViewedModelsChanged.addListener(() => setIs2dToggleActive(areAllModelsVisible(props.viewport, models2d)));\n }, [models2d, props.viewport]);\n const viewToggle2D = async () => {\n if (!models2d)\n return;\n\n if (is2dToggleActive) {\n props.viewport.changeModelDisplay(models2d, false);\n } else {\n await props.viewport.addViewedModels(models2d);\n }\n props.viewport.invalidateScene();\n };\n\n return (\n <IconButton\n className=\"tree-widget-header-tree-toolbar-icon\"\n icon={is2dToggleActive ? \"icon-visibility\" : \"icon-visibility-hide-2\"}\n title={TreeWidget.translate(\"toggle2DViews\")}\n onClick={viewToggle2D}\n label={TreeWidget.translate(\"label2D\")}\n disabled={models2d.length === 0}\n />\n );\n}\n\nfunction View3DButton(props: ModelsTreeHeaderButtonProps) {\n const models3d = useMemo(() => {\n return props.models.filter((model) => !model.isPlanProjection).map((model) => model.id);\n }, [props.models]);\n\n const [is3dToggleActive, setIs3dToggleActive] = useState(() => areAllModelsVisible(props.viewport, models3d));\n\n useEffect(() => {\n return props.viewport.onViewedModelsChanged.addListener(() => setIs3dToggleActive(areAllModelsVisible(props.viewport, models3d)));\n }, [models3d, props.viewport]);\n\n const viewToggle3D = async () => {\n if (!models3d)\n return;\n\n if (is3dToggleActive) {\n props.viewport.changeModelDisplay(models3d, false);\n } else {\n await props.viewport.addViewedModels(models3d);\n }\n props.viewport.invalidateScene();\n };\n\n return (\n <IconButton\n className=\"tree-widget-header-tree-toolbar-icon\"\n icon={is3dToggleActive ? \"icon-visibility\" : \"icon-visibility-hide-2\"}\n title={TreeWidget.translate(\"toggle3DViews\")}\n onClick={viewToggle3D}\n label={TreeWidget.translate(\"label3D\")}\n disabled={models3d.length === 0}\n />\n );\n}\n\nfunction areAllModelsVisible(viewport: Viewport, models: string[]): boolean {\n return models.length !== 0 ? models.every((id) => viewport.viewsModel(id)) : false;\n}\n"]}
@@ -1,11 +1,9 @@
1
- import type { TreeNodeItem } from "@itwin/components-react";
2
- import type { Id64String } from "@itwin/core-bentley";
3
- import { BeEvent } from "@itwin/core-bentley";
4
- import { NodeKey } from "@itwin/presentation-common";
5
- import type { IModelConnection, Viewport } from "@itwin/core-frontend";
6
- import type { ECClassGroupingNodeKey } from "@itwin/presentation-common";
7
- import type { IFilteredPresentationTreeDataProvider, IPresentationTreeDataProvider } from "@itwin/presentation-components";
8
- import type { IVisibilityHandler, VisibilityChangeListener, VisibilityStatus } from "../VisibilityTreeEventHandler";
1
+ import { TreeNodeItem } from "@itwin/components-react";
2
+ import { BeEvent, Id64String } from "@itwin/core-bentley";
3
+ import { IModelConnection, Viewport } from "@itwin/core-frontend";
4
+ import { ECClassGroupingNodeKey, NodeKey } from "@itwin/presentation-common";
5
+ import { IFilteredPresentationTreeDataProvider, IPresentationTreeDataProvider } from "@itwin/presentation-components";
6
+ import { IVisibilityHandler, VisibilityChangeListener, VisibilityStatus } from "../VisibilityTreeEventHandler";
9
7
  /**
10
8
  * Visibility tree node types.
11
9
  * @beta
@@ -1 +1 @@
1
- {"version":3,"file":"ModelsVisibilityHandler.js","sourceRoot":"","sources":["../../../../../src/components/trees/models-tree/ModelsVisibilityHandler.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 type { TreeNodeItem } from \"@itwin/components-react\";\nimport type { Id64String } from \"@itwin/core-bentley\";\nimport { BeEvent } from \"@itwin/core-bentley\";\nimport { QueryBinder, QueryRowFormat } from \"@itwin/core-common\";\nimport { PerModelCategoryVisibility } from \"@itwin/core-frontend\";\nimport { KeySet, NodeKey } from \"@itwin/presentation-common\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { TreeWidget } from \"../../../TreeWidget\";\nimport { CachingElementIdsContainer } from \"./Utils\";\nimport type { IModelConnection, Viewport } from \"@itwin/core-frontend\";\nimport type { ECClassGroupingNodeKey, GroupingNodeKey, Keys } from \"@itwin/presentation-common\";\nimport type { IFilteredPresentationTreeDataProvider, IPresentationTreeDataProvider } from \"@itwin/presentation-components\";\nimport type { IVisibilityHandler, VisibilityChangeListener, VisibilityStatus } from \"../VisibilityTreeEventHandler\";\n\n/**\n * Visibility tree node types.\n * @beta\n */\nexport enum ModelsTreeNodeType {\n Unknown,\n Subject,\n Model,\n Category,\n Element,\n Grouping,\n}\n\n/**\n * Type definition of predicate used to decide if node can be selected\n * @beta\n */\nexport type ModelsTreeSelectionPredicate = (key: NodeKey, type: ModelsTreeNodeType) => boolean;\n\n/**\n * Props for [[ModelsVisibilityHandler]]\n * @alpha\n */\nexport interface ModelsVisibilityHandlerProps {\n rulesetId: string;\n viewport: Viewport;\n hierarchyAutoUpdateEnabled?: boolean;\n /** @internal */\n subjectModelIdsCache?: SubjectModelIdsCache;\n}\n\n/**\n * Visibility handler used by [[ModelsTree]] to control visibility of the tree items.\n * @alpha\n */\nexport class ModelsVisibilityHandler implements IVisibilityHandler {\n private _props: ModelsVisibilityHandlerProps;\n private _pendingVisibilityChange: any | undefined;\n private _subjectModelIdsCache: SubjectModelIdsCache;\n private _filteredDataProvider?: IFilteredPresentationTreeDataProvider;\n private _elementIdsCache: ElementIdsCache;\n private _listeners = new Array<() => void>();\n\n constructor(props: ModelsVisibilityHandlerProps) {\n this._props = props;\n this._subjectModelIdsCache = props.subjectModelIdsCache ?? new SubjectModelIdsCache(this._props.viewport.iModel);\n this._elementIdsCache = new ElementIdsCache(this._props.viewport.iModel, this._props.rulesetId);\n this._listeners.push(this._props.viewport.onViewedCategoriesPerModelChanged.addListener(this.onViewChanged));\n this._listeners.push(this._props.viewport.onViewedCategoriesChanged.addListener(this.onViewChanged));\n this._listeners.push(this._props.viewport.onViewedModelsChanged.addListener(this.onViewChanged));\n this._listeners.push(this._props.viewport.onAlwaysDrawnChanged.addListener(this.onElementAlwaysDrawnChanged));\n this._listeners.push(this._props.viewport.onNeverDrawnChanged.addListener(this.onElementNeverDrawnChanged));\n if (this._props.hierarchyAutoUpdateEnabled) {\n this._listeners.push(Presentation.presentation.onIModelHierarchyChanged.addListener(/* istanbul ignore next */() => this._elementIdsCache.clear()));\n }\n }\n\n public dispose() {\n this._listeners.forEach((remove) => remove());\n clearTimeout(this._pendingVisibilityChange);\n }\n\n public onVisibilityChange = new BeEvent<VisibilityChangeListener>();\n\n /** Sets data provider that is used to get filtered tree hierarchy. */\n public setFilteredDataProvider(provider: IFilteredPresentationTreeDataProvider | undefined) { this._filteredDataProvider = provider; }\n\n public static getNodeType(item: TreeNodeItem, dataProvider: IPresentationTreeDataProvider) {\n if (NodeKey.isClassGroupingNodeKey(dataProvider.getNodeKey(item)))\n return ModelsTreeNodeType.Grouping;\n\n if (!item.extendedData)\n return ModelsTreeNodeType.Unknown;\n\n if (this.isSubjectNode(item))\n return ModelsTreeNodeType.Subject;\n if (this.isModelNode(item))\n return ModelsTreeNodeType.Model;\n if (this.isCategoryNode(item))\n return ModelsTreeNodeType.Category;\n return ModelsTreeNodeType.Element;\n }\n\n public static isSubjectNode(node: TreeNodeItem) {\n return node.extendedData && node.extendedData.isSubject;\n }\n public static isModelNode(node: TreeNodeItem) {\n return node.extendedData && node.extendedData.isModel;\n }\n public static isCategoryNode(node: TreeNodeItem) {\n return node.extendedData && node.extendedData.isCategory;\n }\n\n /** Returns visibility status of the tree node. */\n public getVisibilityStatus(node: TreeNodeItem, nodeKey: NodeKey): VisibilityStatus | Promise<VisibilityStatus> {\n if (NodeKey.isClassGroupingNodeKey(nodeKey))\n return this.getElementGroupingNodeDisplayStatus(node.id, nodeKey);\n\n if (!NodeKey.isInstancesNodeKey(nodeKey))\n return { state: \"hidden\", isDisabled: true };\n\n if (ModelsVisibilityHandler.isSubjectNode(node)) {\n // note: subject nodes may be merged to represent multiple subject instances\n return this.getSubjectNodeVisibility(nodeKey.instanceKeys.map((key) => key.id), node);\n }\n if (ModelsVisibilityHandler.isModelNode(node))\n return this.getModelDisplayStatus(nodeKey.instanceKeys[0].id);\n if (ModelsVisibilityHandler.isCategoryNode(node))\n return this.getCategoryDisplayStatus(nodeKey.instanceKeys[0].id, this.getCategoryParentModelId(node));\n return this.getElementDisplayStatus(nodeKey.instanceKeys[0].id, this.getElementModelId(node), this.getElementCategoryId(node));\n }\n\n /** Changes visibility of the items represented by the tree node. */\n public async changeVisibility(node: TreeNodeItem, nodeKey: NodeKey, on: boolean) {\n if (NodeKey.isClassGroupingNodeKey(nodeKey)) {\n await this.changeElementGroupingNodeState(nodeKey, on);\n return;\n }\n\n if (!NodeKey.isInstancesNodeKey(nodeKey))\n return;\n\n if (ModelsVisibilityHandler.isSubjectNode(node)) {\n await this.changeSubjectNodeState(nodeKey.instanceKeys.map((key) => key.id), node, on);\n } else if (ModelsVisibilityHandler.isModelNode(node)) {\n await this.changeModelState(nodeKey.instanceKeys[0].id, on);\n } else if (ModelsVisibilityHandler.isCategoryNode(node)) {\n this.changeCategoryState(nodeKey.instanceKeys[0].id, this.getCategoryParentModelId(node), on);\n } else {\n await this.changeElementState(nodeKey.instanceKeys[0].id, this.getElementModelId(node), this.getElementCategoryId(node), on);\n }\n }\n\n protected async getSubjectNodeVisibility(ids: Id64String[], node: TreeNodeItem): Promise<VisibilityStatus> {\n if (!this._props.viewport.view.isSpatialView())\n return { isDisabled: true, state: \"hidden\", tooltip: createTooltip(\"disabled\", \"subject.nonSpatialView\") };\n\n if (this._filteredDataProvider)\n return this.getFilteredSubjectDisplayStatus(this._filteredDataProvider, ids, node);\n\n return this.getSubjectDisplayStatus(ids);\n }\n\n private async getSubjectDisplayStatus(ids: Id64String[]): Promise<VisibilityStatus> {\n const modelIds = await this.getSubjectModelIds(ids);\n const isDisplayed = modelIds.some((modelId) => this.getModelDisplayStatus(modelId).state === \"visible\");\n if (isDisplayed)\n return { state: \"visible\", tooltip: createTooltip(\"visible\", \"subject.atLeastOneModelVisible\") };\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"subject.allModelsHidden\") };\n }\n\n private async getFilteredSubjectDisplayStatus(provider: IFilteredPresentationTreeDataProvider, ids: Id64String[], node: TreeNodeItem): Promise<VisibilityStatus> {\n if (provider.nodeMatchesFilter(node))\n return this.getSubjectDisplayStatus(ids);\n\n const children = await provider.getNodes(node);\n const childrenDisplayStatuses = await Promise.all(children.map((childNode) => this.getVisibilityStatus(childNode, provider.getNodeKey(childNode))));\n if (childrenDisplayStatuses.some((status) => status.state === \"visible\"))\n return { state: \"visible\", tooltip: createTooltip(\"visible\", \"subject.atLeastOneModelVisible\") };\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"subject.allModelsHidden\") };\n }\n\n protected getModelDisplayStatus(id: Id64String): VisibilityStatus {\n if (!this._props.viewport.view.isSpatialView())\n return { isDisabled: true, state: \"hidden\", tooltip: createTooltip(\"disabled\", \"model.nonSpatialView\") };\n const isDisplayed = this._props.viewport.view.viewsModel(id);\n return { state: isDisplayed ? \"visible\" : \"hidden\", tooltip: createTooltip(isDisplayed ? \"visible\" : \"hidden\", undefined) };\n }\n\n protected getCategoryDisplayStatus(id: Id64String, parentModelId: Id64String | undefined): VisibilityStatus {\n if (parentModelId) {\n if (this.getModelDisplayStatus(parentModelId).state === \"hidden\")\n return { state: \"hidden\", isDisabled: true, tooltip: createTooltip(\"disabled\", \"category.modelNotDisplayed\") };\n\n const override = this._props.viewport.perModelCategoryVisibility.getOverride(parentModelId, id);\n switch (override) {\n case PerModelCategoryVisibility.Override.Show:\n return { state: \"visible\", tooltip: createTooltip(\"visible\", \"category.displayedThroughPerModelOverride\") };\n case PerModelCategoryVisibility.Override.Hide:\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"category.hiddenThroughPerModelOverride\") };\n }\n }\n const isDisplayed = this._props.viewport.view.viewsCategory(id);\n return {\n state: isDisplayed ? \"visible\" : \"hidden\",\n tooltip: isDisplayed\n ? createTooltip(\"visible\", \"category.displayedThroughCategorySelector\")\n : createTooltip(\"hidden\", \"category.hiddenThroughCategorySelector\"),\n };\n }\n\n protected async getElementGroupingNodeDisplayStatus(_id: string, key: ECClassGroupingNodeKey): Promise<VisibilityStatus> {\n const { modelId, categoryId, elementIds } = await this.getGroupedElementIds(key);\n\n if (!modelId || !this._props.viewport.view.viewsModel(modelId))\n return { isDisabled: true, state: \"hidden\", tooltip: createTooltip(\"disabled\", \"element.modelNotDisplayed\") };\n\n if (this._props.viewport.alwaysDrawn !== undefined && this._props.viewport.alwaysDrawn.size > 0) {\n let atLeastOneElementForceDisplayed = false;\n for await (const elementId of elementIds.getElementIds()) {\n if (this._props.viewport.alwaysDrawn.has(elementId)) {\n atLeastOneElementForceDisplayed = true;\n break;\n }\n }\n if (atLeastOneElementForceDisplayed)\n return { state: \"visible\", tooltip: createTooltip(\"visible\", \"element.displayedThroughAlwaysDrawnList\") };\n }\n\n if (this._props.viewport.alwaysDrawn !== undefined && this._props.viewport.alwaysDrawn.size !== 0 && this._props.viewport.isAlwaysDrawnExclusive)\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"element.hiddenDueToOtherElementsExclusivelyAlwaysDrawn\") };\n\n // istanbul ignore else\n if (this._props.viewport.neverDrawn !== undefined && this._props.viewport.neverDrawn.size > 0) {\n let allElementsForceHidden = true;\n for await (const elementId of elementIds.getElementIds()) {\n if (!this._props.viewport.neverDrawn.has(elementId)) {\n allElementsForceHidden = false;\n break;\n }\n }\n if (allElementsForceHidden)\n return { state: \"hidden\", tooltip: createTooltip(\"visible\", \"element.hiddenThroughNeverDrawnList\") };\n }\n\n if (categoryId && this.getCategoryDisplayStatus(categoryId, modelId).state === \"visible\")\n return { state: \"visible\", tooltip: createTooltip(\"visible\", undefined) };\n\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"element.hiddenThroughCategory\") };\n }\n\n protected getElementDisplayStatus(elementId: Id64String, modelId: Id64String | undefined, categoryId: Id64String | undefined): VisibilityStatus {\n if (!modelId || !this._props.viewport.view.viewsModel(modelId))\n return { isDisabled: true, state: \"hidden\", tooltip: createTooltip(\"disabled\", \"element.modelNotDisplayed\") };\n if (this._props.viewport.neverDrawn !== undefined && this._props.viewport.neverDrawn.has(elementId))\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"element.hiddenThroughNeverDrawnList\") };\n if (this._props.viewport.alwaysDrawn !== undefined) {\n if (this._props.viewport.alwaysDrawn.has(elementId))\n return { state: \"visible\", tooltip: createTooltip(\"visible\", \"element.displayedThroughAlwaysDrawnList\") };\n if (this._props.viewport.alwaysDrawn.size !== 0 && this._props.viewport.isAlwaysDrawnExclusive)\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"element.hiddenDueToOtherElementsExclusivelyAlwaysDrawn\") };\n }\n if (categoryId && this.getCategoryDisplayStatus(categoryId, modelId).state === \"visible\")\n return { state: \"visible\", tooltip: createTooltip(\"visible\", undefined) };\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"element.hiddenThroughCategory\") };\n }\n\n protected async changeSubjectNodeState(ids: Id64String[], node: TreeNodeItem, on: boolean) {\n if (!this._props.viewport.view.isSpatialView())\n return;\n\n if (this._filteredDataProvider)\n return this.changeFilteredSubjectState(this._filteredDataProvider, ids, node, on);\n\n return this.changeSubjectState(ids, on);\n }\n\n private async changeFilteredSubjectState(provider: IFilteredPresentationTreeDataProvider, ids: Id64String[], node: TreeNodeItem, on: boolean) {\n if (provider.nodeMatchesFilter(node))\n return this.changeSubjectState(ids, on);\n\n const children = await provider.getNodes(node);\n return Promise.all(children.map(async (childNode) => this.changeVisibility(childNode, provider.getNodeKey(childNode), on)));\n }\n\n private async changeSubjectState(ids: Id64String[], on: boolean) {\n const modelIds = await this.getSubjectModelIds(ids);\n return this.changeModelsVisibility(modelIds, on);\n }\n\n protected async changeModelState(id: Id64String, on: boolean) {\n if (!this._props.viewport.view.isSpatialView())\n return;\n\n return this.changeModelsVisibility([id], on);\n }\n\n protected async changeModelsVisibility(ids: Id64String[], visible: boolean) {\n if (visible)\n return this._props.viewport.addViewedModels(ids);\n else\n this._props.viewport.changeModelDisplay(ids, false);\n }\n\n protected changeCategoryState(categoryId: Id64String, parentModelId: Id64String | undefined, on: boolean) {\n if (parentModelId) {\n const isDisplayedInSelector = this._props.viewport.view.viewsCategory(categoryId);\n const ovr = (on === isDisplayedInSelector) ? PerModelCategoryVisibility.Override.None\n : on ? PerModelCategoryVisibility.Override.Show : PerModelCategoryVisibility.Override.Hide;\n this._props.viewport.perModelCategoryVisibility.setOverride(parentModelId, categoryId, ovr);\n if (ovr === PerModelCategoryVisibility.Override.None && on) {\n // we took off the override which means the category is displayed in selector, but\n // doesn't mean all its subcategories are displayed - this call ensures that\n this._props.viewport.changeCategoryDisplay([categoryId], true, true);\n }\n return;\n }\n this._props.viewport.changeCategoryDisplay([categoryId], on, on ? true : false);\n }\n\n protected async changeElementGroupingNodeState(key: ECClassGroupingNodeKey, on: boolean) {\n const { modelId, categoryId, elementIds } = await this.getGroupedElementIds(key);\n await this.changeElementsState(modelId, categoryId, elementIds.getElementIds(), on);\n }\n\n protected async changeElementState(id: Id64String, modelId: Id64String | undefined, categoryId: Id64String | undefined, on: boolean) {\n const childIdsContainer = this.getAssemblyElementIds(id);\n async function* elementIds() {\n yield id;\n for await (const childId of childIdsContainer.getElementIds())\n yield childId;\n }\n await this.changeElementsState(modelId, categoryId, elementIds(), on);\n }\n\n protected async changeElementsState(modelId: Id64String | undefined, categoryId: Id64String | undefined, elementIds: AsyncGenerator<Id64String>, on: boolean) {\n const isDisplayedByDefault = modelId && this.getModelDisplayStatus(modelId).state === \"visible\"\n && categoryId && this.getCategoryDisplayStatus(categoryId, modelId).state === \"visible\";\n const isHiddenDueToExclusiveAlwaysDrawnElements = this._props.viewport.isAlwaysDrawnExclusive && this._props.viewport.alwaysDrawn && 0 !== this._props.viewport.alwaysDrawn.size;\n const currNeverDrawn = new Set(this._props.viewport.neverDrawn ? this._props.viewport.neverDrawn : []);\n const currAlwaysDrawn = new Set(this._props.viewport.alwaysDrawn ?\n this._props.viewport.alwaysDrawn : /* istanbul ignore next */[],\n );\n for await (const elementId of elementIds) {\n if (on) {\n currNeverDrawn.delete(elementId);\n if (!isDisplayedByDefault || isHiddenDueToExclusiveAlwaysDrawnElements)\n currAlwaysDrawn.add(elementId);\n } else {\n currAlwaysDrawn.delete(elementId);\n if (isDisplayedByDefault && !isHiddenDueToExclusiveAlwaysDrawnElements)\n currNeverDrawn.add(elementId);\n }\n }\n this._props.viewport.setNeverDrawn(currNeverDrawn);\n this._props.viewport.setAlwaysDrawn(currAlwaysDrawn, this._props.viewport.isAlwaysDrawnExclusive);\n }\n\n private onVisibilityChangeInternal() {\n if (this._pendingVisibilityChange)\n return;\n\n this._pendingVisibilityChange = setTimeout(() => {\n this.onVisibilityChange.raiseEvent();\n this._pendingVisibilityChange = undefined;\n }, 0);\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private onViewChanged = (_vp: Viewport) => {\n this.onVisibilityChangeInternal();\n };\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private onElementAlwaysDrawnChanged = () => {\n this.onVisibilityChangeInternal();\n };\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private onElementNeverDrawnChanged = () => {\n this.onVisibilityChangeInternal();\n };\n\n private getCategoryParentModelId(categoryNode: TreeNodeItem): Id64String | undefined {\n return categoryNode.extendedData ? categoryNode.extendedData.modelId : /* istanbul ignore next */ undefined;\n }\n\n private getElementModelId(elementNode: TreeNodeItem): Id64String | undefined {\n return elementNode.extendedData ? elementNode.extendedData.modelId : /* istanbul ignore next */ undefined;\n }\n\n private getElementCategoryId(elementNode: TreeNodeItem): Id64String | undefined {\n return elementNode.extendedData ? elementNode.extendedData.categoryId : /* istanbul ignore next */ undefined;\n }\n\n private async getSubjectModelIds(subjectIds: Id64String[]) {\n return (await Promise.all(subjectIds.map(async (id) => this._subjectModelIdsCache.getSubjectModelIds(id))))\n .reduce((allModelIds: Id64String[], curr: Id64String[]) => [...allModelIds, ...curr], []);\n }\n\n // istanbul ignore next\n private getAssemblyElementIds(assemblyId: Id64String) {\n return this._elementIdsCache.getAssemblyElementIds(assemblyId);\n }\n\n // istanbul ignore next\n private async getGroupedElementIds(groupingNodeKey: GroupingNodeKey) {\n return this._elementIdsCache.getGroupedElementIds(groupingNodeKey);\n }\n}\n\n/** @internal */\nexport class SubjectModelIdsCache {\n private _imodel: IModelConnection;\n private _subjectsHierarchy: Map<Id64String, Id64String[]> | undefined;\n private _subjectModels: Map<Id64String, Id64String[]> | undefined;\n private _init: Promise<void> | undefined;\n\n constructor(imodel: IModelConnection) {\n this._imodel = imodel;\n }\n\n private async initSubjectModels() {\n const querySubjects = (): AsyncIterableIterator<{ id: Id64String, parentId?: Id64String, targetPartitionId?: Id64String }> => {\n const subjectsQuery = `\n SELECT ECInstanceId id, Parent.Id parentId, json_extract(JsonProperties, '$.Subject.Model.TargetPartition') targetPartitionId\n FROM bis.Subject\n `;\n return this._imodel.query(subjectsQuery, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\n };\n const queryModels = (): AsyncIterableIterator<{ id: Id64String, parentId: Id64String }> => {\n const modelsQuery = `\n SELECT p.ECInstanceId id, p.Parent.Id parentId\n FROM bis.InformationPartitionElement p\n INNER JOIN bis.GeometricModel3d m ON m.ModeledElement.Id = p.ECInstanceId\n WHERE NOT m.IsPrivate\n `;\n return this._imodel.query(modelsQuery, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\n };\n\n function pushToMap<TKey, TValue>(map: Map<TKey, TValue[]>, key: TKey, value: TValue) {\n let list = map.get(key);\n if (!list) {\n list = [];\n map.set(key, list);\n }\n list.push(value);\n }\n\n this._subjectsHierarchy = new Map();\n const targetPartitionSubjects = new Map<Id64String, Id64String[]>();\n for await (const subject of querySubjects()) {\n // istanbul ignore else\n if (subject.parentId)\n pushToMap(this._subjectsHierarchy, subject.parentId, subject.id);\n // istanbul ignore if\n if (subject.targetPartitionId)\n pushToMap(targetPartitionSubjects, subject.targetPartitionId, subject.id);\n }\n\n this._subjectModels = new Map();\n for await (const model of queryModels()) {\n // istanbul ignore next\n const subjectIds = targetPartitionSubjects.get(model.id) ?? [];\n // istanbul ignore else\n if (!subjectIds.includes(model.parentId))\n subjectIds.push(model.parentId);\n\n subjectIds.forEach((subjectId) => {\n pushToMap(this._subjectModels!, subjectId, model.id);\n });\n }\n }\n\n private async initCache() {\n if (!this._init) {\n this._init = this.initSubjectModels().then(() => { });\n }\n return this._init;\n }\n\n private appendSubjectModelsRecursively(modelIds: Id64String[], subjectId: Id64String) {\n const subjectModelIds = this._subjectModels!.get(subjectId);\n if (subjectModelIds)\n modelIds.push(...subjectModelIds);\n\n const childSubjectIds = this._subjectsHierarchy!.get(subjectId);\n if (childSubjectIds)\n childSubjectIds.forEach((cs) => this.appendSubjectModelsRecursively(modelIds, cs));\n }\n\n public async getSubjectModelIds(subjectId: Id64String): Promise<Id64String[]> {\n await this.initCache();\n const modelIds = new Array<Id64String>();\n this.appendSubjectModelsRecursively(modelIds, subjectId);\n return modelIds;\n }\n}\n\ninterface GroupedElementIds {\n modelId?: string;\n categoryId?: string;\n elementIds: CachingElementIdsContainer;\n}\n\n// istanbul ignore next\nclass ElementIdsCache {\n private _assemblyElementIdsCache = new Map<string, CachingElementIdsContainer>();\n private _groupedElementIdsCache = new Map<string, GroupedElementIds>();\n\n constructor(private _imodel: IModelConnection, private _rulesetId: string) {\n }\n\n public clear() {\n this._assemblyElementIdsCache.clear();\n this._groupedElementIdsCache.clear();\n }\n\n public getAssemblyElementIds(assemblyId: Id64String) {\n const ids = this._assemblyElementIdsCache.get(assemblyId);\n if (ids)\n return ids;\n\n const container = createAssemblyElementIdsContainer(this._imodel, this._rulesetId, assemblyId);\n this._assemblyElementIdsCache.set(assemblyId, container);\n return container;\n }\n\n public async getGroupedElementIds(groupingNodeKey: GroupingNodeKey): Promise<GroupedElementIds> {\n const keyString = JSON.stringify(groupingNodeKey);\n const ids = this._groupedElementIdsCache.get(keyString);\n if (ids)\n return ids;\n const info = await createGroupedElementsInfo(this._imodel, this._rulesetId, groupingNodeKey);\n this._groupedElementIdsCache.set(keyString, info);\n return info;\n }\n}\n\n// istanbul ignore next\nasync function* createInstanceIdsGenerator(imodel: IModelConnection, rulesetId: string, displayType: string, inputKeys: Keys) {\n const res = await Presentation.presentation.getContentInstanceKeys({\n imodel,\n rulesetOrId: rulesetId,\n displayType,\n keys: new KeySet(inputKeys),\n });\n for await (const key of res.items()) {\n yield key.id;\n }\n}\n\n// istanbul ignore next\nfunction createAssemblyElementIdsContainer(imodel: IModelConnection, rulesetId: string, assemblyId: Id64String) {\n return new CachingElementIdsContainer(createInstanceIdsGenerator(imodel, rulesetId, \"AssemblyElementsRequest\", [{ className: \"BisCore:Element\", id: assemblyId }]));\n}\n\n// istanbul ignore next\nasync function createGroupedElementsInfo(imodel: IModelConnection, rulesetId: string, groupingNodeKey: GroupingNodeKey) {\n const groupedElementIdsContainer = new CachingElementIdsContainer(createInstanceIdsGenerator(imodel, rulesetId, \"AssemblyElementsRequest\", [groupingNodeKey]));\n const elementId = await groupedElementIdsContainer.getElementIds().next();\n if (elementId.done)\n throw new Error(\"Invalid grouping node key\");\n\n let modelId, categoryId;\n const query = `SELECT Model.Id AS modelId, Category.Id AS categoryId FROM bis.GeometricElement3d WHERE ECInstanceId = ? LIMIT 1`;\n for await (const modelAndCategoryIds of imodel.query(query, QueryBinder.from([elementId.value]), { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n modelId = modelAndCategoryIds.modelId;\n categoryId = modelAndCategoryIds.categoryId;\n break;\n }\n return { modelId, categoryId, elementIds: groupedElementIdsContainer };\n}\n\nconst createTooltip = (status: \"visible\" | \"hidden\" | \"disabled\", tooltipStringId: string | undefined): string => {\n const statusStringId = `modelTree.status.${status}`;\n const statusString = TreeWidget.translate(statusStringId);\n if (!tooltipStringId)\n return statusString;\n\n tooltipStringId = `modelTree.tooltips.${tooltipStringId}`;\n const tooltipString = TreeWidget.translate(tooltipStringId);\n return `${statusString}: ${tooltipString}`;\n};\n"]}
1
+ {"version":3,"file":"ModelsVisibilityHandler.js","sourceRoot":"","sources":["../../../../../src/components/trees/models-tree/ModelsVisibilityHandler.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 { TreeNodeItem } from \"@itwin/components-react\";\nimport { BeEvent, Id64String } from \"@itwin/core-bentley\";\nimport { QueryBinder, QueryRowFormat } from \"@itwin/core-common\";\nimport { IModelConnection, PerModelCategoryVisibility, Viewport } from \"@itwin/core-frontend\";\nimport { ECClassGroupingNodeKey, GroupingNodeKey, Keys, KeySet, NodeKey } from \"@itwin/presentation-common\";\nimport { IFilteredPresentationTreeDataProvider, IPresentationTreeDataProvider } from \"@itwin/presentation-components\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { TreeWidget } from \"../../../TreeWidget\";\nimport { IVisibilityHandler, VisibilityChangeListener, VisibilityStatus } from \"../VisibilityTreeEventHandler\";\nimport { CachingElementIdsContainer } from \"./Utils\";\n\n/**\n * Visibility tree node types.\n * @beta\n */\nexport enum ModelsTreeNodeType {\n Unknown,\n Subject,\n Model,\n Category,\n Element,\n Grouping,\n}\n\n/**\n * Type definition of predicate used to decide if node can be selected\n * @beta\n */\nexport type ModelsTreeSelectionPredicate = (key: NodeKey, type: ModelsTreeNodeType) => boolean;\n\n/**\n * Props for [[ModelsVisibilityHandler]]\n * @alpha\n */\nexport interface ModelsVisibilityHandlerProps {\n rulesetId: string;\n viewport: Viewport;\n hierarchyAutoUpdateEnabled?: boolean;\n /** @internal */\n subjectModelIdsCache?: SubjectModelIdsCache;\n}\n\n/**\n * Visibility handler used by [[ModelsTree]] to control visibility of the tree items.\n * @alpha\n */\nexport class ModelsVisibilityHandler implements IVisibilityHandler {\n private _props: ModelsVisibilityHandlerProps;\n private _pendingVisibilityChange: any | undefined;\n private _subjectModelIdsCache: SubjectModelIdsCache;\n private _filteredDataProvider?: IFilteredPresentationTreeDataProvider;\n private _elementIdsCache: ElementIdsCache;\n private _listeners = new Array<() => void>();\n\n constructor(props: ModelsVisibilityHandlerProps) {\n this._props = props;\n this._subjectModelIdsCache = props.subjectModelIdsCache ?? new SubjectModelIdsCache(this._props.viewport.iModel);\n this._elementIdsCache = new ElementIdsCache(this._props.viewport.iModel, this._props.rulesetId);\n this._listeners.push(this._props.viewport.onViewedCategoriesPerModelChanged.addListener(this.onViewChanged));\n this._listeners.push(this._props.viewport.onViewedCategoriesChanged.addListener(this.onViewChanged));\n this._listeners.push(this._props.viewport.onViewedModelsChanged.addListener(this.onViewChanged));\n this._listeners.push(this._props.viewport.onAlwaysDrawnChanged.addListener(this.onElementAlwaysDrawnChanged));\n this._listeners.push(this._props.viewport.onNeverDrawnChanged.addListener(this.onElementNeverDrawnChanged));\n if (this._props.hierarchyAutoUpdateEnabled) {\n this._listeners.push(Presentation.presentation.onIModelHierarchyChanged.addListener(/* istanbul ignore next */() => this._elementIdsCache.clear()));\n }\n }\n\n public dispose() {\n this._listeners.forEach((remove) => remove());\n clearTimeout(this._pendingVisibilityChange);\n }\n\n public onVisibilityChange = new BeEvent<VisibilityChangeListener>();\n\n /** Sets data provider that is used to get filtered tree hierarchy. */\n public setFilteredDataProvider(provider: IFilteredPresentationTreeDataProvider | undefined) { this._filteredDataProvider = provider; }\n\n public static getNodeType(item: TreeNodeItem, dataProvider: IPresentationTreeDataProvider) {\n if (NodeKey.isClassGroupingNodeKey(dataProvider.getNodeKey(item)))\n return ModelsTreeNodeType.Grouping;\n\n if (!item.extendedData)\n return ModelsTreeNodeType.Unknown;\n\n if (this.isSubjectNode(item))\n return ModelsTreeNodeType.Subject;\n if (this.isModelNode(item))\n return ModelsTreeNodeType.Model;\n if (this.isCategoryNode(item))\n return ModelsTreeNodeType.Category;\n return ModelsTreeNodeType.Element;\n }\n\n public static isSubjectNode(node: TreeNodeItem) {\n return node.extendedData && node.extendedData.isSubject;\n }\n public static isModelNode(node: TreeNodeItem) {\n return node.extendedData && node.extendedData.isModel;\n }\n public static isCategoryNode(node: TreeNodeItem) {\n return node.extendedData && node.extendedData.isCategory;\n }\n\n /** Returns visibility status of the tree node. */\n public getVisibilityStatus(node: TreeNodeItem, nodeKey: NodeKey): VisibilityStatus | Promise<VisibilityStatus> {\n if (NodeKey.isClassGroupingNodeKey(nodeKey))\n return this.getElementGroupingNodeDisplayStatus(node.id, nodeKey);\n\n if (!NodeKey.isInstancesNodeKey(nodeKey))\n return { state: \"hidden\", isDisabled: true };\n\n if (ModelsVisibilityHandler.isSubjectNode(node)) {\n // note: subject nodes may be merged to represent multiple subject instances\n return this.getSubjectNodeVisibility(nodeKey.instanceKeys.map((key) => key.id), node);\n }\n if (ModelsVisibilityHandler.isModelNode(node))\n return this.getModelDisplayStatus(nodeKey.instanceKeys[0].id);\n if (ModelsVisibilityHandler.isCategoryNode(node))\n return this.getCategoryDisplayStatus(nodeKey.instanceKeys[0].id, this.getCategoryParentModelId(node));\n return this.getElementDisplayStatus(nodeKey.instanceKeys[0].id, this.getElementModelId(node), this.getElementCategoryId(node));\n }\n\n /** Changes visibility of the items represented by the tree node. */\n public async changeVisibility(node: TreeNodeItem, nodeKey: NodeKey, on: boolean) {\n if (NodeKey.isClassGroupingNodeKey(nodeKey)) {\n await this.changeElementGroupingNodeState(nodeKey, on);\n return;\n }\n\n if (!NodeKey.isInstancesNodeKey(nodeKey))\n return;\n\n if (ModelsVisibilityHandler.isSubjectNode(node)) {\n await this.changeSubjectNodeState(nodeKey.instanceKeys.map((key) => key.id), node, on);\n } else if (ModelsVisibilityHandler.isModelNode(node)) {\n await this.changeModelState(nodeKey.instanceKeys[0].id, on);\n } else if (ModelsVisibilityHandler.isCategoryNode(node)) {\n this.changeCategoryState(nodeKey.instanceKeys[0].id, this.getCategoryParentModelId(node), on);\n } else {\n await this.changeElementState(nodeKey.instanceKeys[0].id, this.getElementModelId(node), this.getElementCategoryId(node), on);\n }\n }\n\n protected async getSubjectNodeVisibility(ids: Id64String[], node: TreeNodeItem): Promise<VisibilityStatus> {\n if (!this._props.viewport.view.isSpatialView())\n return { isDisabled: true, state: \"hidden\", tooltip: createTooltip(\"disabled\", \"subject.nonSpatialView\") };\n\n if (this._filteredDataProvider)\n return this.getFilteredSubjectDisplayStatus(this._filteredDataProvider, ids, node);\n\n return this.getSubjectDisplayStatus(ids);\n }\n\n private async getSubjectDisplayStatus(ids: Id64String[]): Promise<VisibilityStatus> {\n const modelIds = await this.getSubjectModelIds(ids);\n const isDisplayed = modelIds.some((modelId) => this.getModelDisplayStatus(modelId).state === \"visible\");\n if (isDisplayed)\n return { state: \"visible\", tooltip: createTooltip(\"visible\", \"subject.atLeastOneModelVisible\") };\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"subject.allModelsHidden\") };\n }\n\n private async getFilteredSubjectDisplayStatus(provider: IFilteredPresentationTreeDataProvider, ids: Id64String[], node: TreeNodeItem): Promise<VisibilityStatus> {\n if (provider.nodeMatchesFilter(node))\n return this.getSubjectDisplayStatus(ids);\n\n const children = await provider.getNodes(node);\n const childrenDisplayStatuses = await Promise.all(children.map((childNode) => this.getVisibilityStatus(childNode, provider.getNodeKey(childNode))));\n if (childrenDisplayStatuses.some((status) => status.state === \"visible\"))\n return { state: \"visible\", tooltip: createTooltip(\"visible\", \"subject.atLeastOneModelVisible\") };\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"subject.allModelsHidden\") };\n }\n\n protected getModelDisplayStatus(id: Id64String): VisibilityStatus {\n if (!this._props.viewport.view.isSpatialView())\n return { isDisabled: true, state: \"hidden\", tooltip: createTooltip(\"disabled\", \"model.nonSpatialView\") };\n const isDisplayed = this._props.viewport.view.viewsModel(id);\n return { state: isDisplayed ? \"visible\" : \"hidden\", tooltip: createTooltip(isDisplayed ? \"visible\" : \"hidden\", undefined) };\n }\n\n protected getCategoryDisplayStatus(id: Id64String, parentModelId: Id64String | undefined): VisibilityStatus {\n if (parentModelId) {\n if (this.getModelDisplayStatus(parentModelId).state === \"hidden\")\n return { state: \"hidden\", isDisabled: true, tooltip: createTooltip(\"disabled\", \"category.modelNotDisplayed\") };\n\n const override = this._props.viewport.perModelCategoryVisibility.getOverride(parentModelId, id);\n switch (override) {\n case PerModelCategoryVisibility.Override.Show:\n return { state: \"visible\", tooltip: createTooltip(\"visible\", \"category.displayedThroughPerModelOverride\") };\n case PerModelCategoryVisibility.Override.Hide:\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"category.hiddenThroughPerModelOverride\") };\n }\n }\n const isDisplayed = this._props.viewport.view.viewsCategory(id);\n return {\n state: isDisplayed ? \"visible\" : \"hidden\",\n tooltip: isDisplayed\n ? createTooltip(\"visible\", \"category.displayedThroughCategorySelector\")\n : createTooltip(\"hidden\", \"category.hiddenThroughCategorySelector\"),\n };\n }\n\n protected async getElementGroupingNodeDisplayStatus(_id: string, key: ECClassGroupingNodeKey): Promise<VisibilityStatus> {\n const { modelId, categoryId, elementIds } = await this.getGroupedElementIds(key);\n\n if (!modelId || !this._props.viewport.view.viewsModel(modelId))\n return { isDisabled: true, state: \"hidden\", tooltip: createTooltip(\"disabled\", \"element.modelNotDisplayed\") };\n\n if (this._props.viewport.alwaysDrawn !== undefined && this._props.viewport.alwaysDrawn.size > 0) {\n let atLeastOneElementForceDisplayed = false;\n for await (const elementId of elementIds.getElementIds()) {\n if (this._props.viewport.alwaysDrawn.has(elementId)) {\n atLeastOneElementForceDisplayed = true;\n break;\n }\n }\n if (atLeastOneElementForceDisplayed)\n return { state: \"visible\", tooltip: createTooltip(\"visible\", \"element.displayedThroughAlwaysDrawnList\") };\n }\n\n if (this._props.viewport.alwaysDrawn !== undefined && this._props.viewport.alwaysDrawn.size !== 0 && this._props.viewport.isAlwaysDrawnExclusive)\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"element.hiddenDueToOtherElementsExclusivelyAlwaysDrawn\") };\n\n // istanbul ignore else\n if (this._props.viewport.neverDrawn !== undefined && this._props.viewport.neverDrawn.size > 0) {\n let allElementsForceHidden = true;\n for await (const elementId of elementIds.getElementIds()) {\n if (!this._props.viewport.neverDrawn.has(elementId)) {\n allElementsForceHidden = false;\n break;\n }\n }\n if (allElementsForceHidden)\n return { state: \"hidden\", tooltip: createTooltip(\"visible\", \"element.hiddenThroughNeverDrawnList\") };\n }\n\n if (categoryId && this.getCategoryDisplayStatus(categoryId, modelId).state === \"visible\")\n return { state: \"visible\", tooltip: createTooltip(\"visible\", undefined) };\n\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"element.hiddenThroughCategory\") };\n }\n\n protected getElementDisplayStatus(elementId: Id64String, modelId: Id64String | undefined, categoryId: Id64String | undefined): VisibilityStatus {\n if (!modelId || !this._props.viewport.view.viewsModel(modelId))\n return { isDisabled: true, state: \"hidden\", tooltip: createTooltip(\"disabled\", \"element.modelNotDisplayed\") };\n if (this._props.viewport.neverDrawn !== undefined && this._props.viewport.neverDrawn.has(elementId))\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"element.hiddenThroughNeverDrawnList\") };\n if (this._props.viewport.alwaysDrawn !== undefined) {\n if (this._props.viewport.alwaysDrawn.has(elementId))\n return { state: \"visible\", tooltip: createTooltip(\"visible\", \"element.displayedThroughAlwaysDrawnList\") };\n if (this._props.viewport.alwaysDrawn.size !== 0 && this._props.viewport.isAlwaysDrawnExclusive)\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"element.hiddenDueToOtherElementsExclusivelyAlwaysDrawn\") };\n }\n if (categoryId && this.getCategoryDisplayStatus(categoryId, modelId).state === \"visible\")\n return { state: \"visible\", tooltip: createTooltip(\"visible\", undefined) };\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"element.hiddenThroughCategory\") };\n }\n\n protected async changeSubjectNodeState(ids: Id64String[], node: TreeNodeItem, on: boolean) {\n if (!this._props.viewport.view.isSpatialView())\n return;\n\n if (this._filteredDataProvider)\n return this.changeFilteredSubjectState(this._filteredDataProvider, ids, node, on);\n\n return this.changeSubjectState(ids, on);\n }\n\n private async changeFilteredSubjectState(provider: IFilteredPresentationTreeDataProvider, ids: Id64String[], node: TreeNodeItem, on: boolean) {\n if (provider.nodeMatchesFilter(node))\n return this.changeSubjectState(ids, on);\n\n const children = await provider.getNodes(node);\n return Promise.all(children.map(async (childNode) => this.changeVisibility(childNode, provider.getNodeKey(childNode), on)));\n }\n\n private async changeSubjectState(ids: Id64String[], on: boolean) {\n const modelIds = await this.getSubjectModelIds(ids);\n return this.changeModelsVisibility(modelIds, on);\n }\n\n protected async changeModelState(id: Id64String, on: boolean) {\n if (!this._props.viewport.view.isSpatialView())\n return;\n\n return this.changeModelsVisibility([id], on);\n }\n\n protected async changeModelsVisibility(ids: Id64String[], visible: boolean) {\n if (visible)\n return this._props.viewport.addViewedModels(ids);\n else\n this._props.viewport.changeModelDisplay(ids, false);\n }\n\n protected changeCategoryState(categoryId: Id64String, parentModelId: Id64String | undefined, on: boolean) {\n if (parentModelId) {\n const isDisplayedInSelector = this._props.viewport.view.viewsCategory(categoryId);\n const ovr = (on === isDisplayedInSelector) ? PerModelCategoryVisibility.Override.None\n : on ? PerModelCategoryVisibility.Override.Show : PerModelCategoryVisibility.Override.Hide;\n this._props.viewport.perModelCategoryVisibility.setOverride(parentModelId, categoryId, ovr);\n if (ovr === PerModelCategoryVisibility.Override.None && on) {\n // we took off the override which means the category is displayed in selector, but\n // doesn't mean all its subcategories are displayed - this call ensures that\n this._props.viewport.changeCategoryDisplay([categoryId], true, true);\n }\n return;\n }\n this._props.viewport.changeCategoryDisplay([categoryId], on, on ? true : false);\n }\n\n protected async changeElementGroupingNodeState(key: ECClassGroupingNodeKey, on: boolean) {\n const { modelId, categoryId, elementIds } = await this.getGroupedElementIds(key);\n await this.changeElementsState(modelId, categoryId, elementIds.getElementIds(), on);\n }\n\n protected async changeElementState(id: Id64String, modelId: Id64String | undefined, categoryId: Id64String | undefined, on: boolean) {\n const childIdsContainer = this.getAssemblyElementIds(id);\n async function* elementIds() {\n yield id;\n for await (const childId of childIdsContainer.getElementIds())\n yield childId;\n }\n await this.changeElementsState(modelId, categoryId, elementIds(), on);\n }\n\n protected async changeElementsState(modelId: Id64String | undefined, categoryId: Id64String | undefined, elementIds: AsyncGenerator<Id64String>, on: boolean) {\n const isDisplayedByDefault = modelId && this.getModelDisplayStatus(modelId).state === \"visible\"\n && categoryId && this.getCategoryDisplayStatus(categoryId, modelId).state === \"visible\";\n const isHiddenDueToExclusiveAlwaysDrawnElements = this._props.viewport.isAlwaysDrawnExclusive && this._props.viewport.alwaysDrawn && 0 !== this._props.viewport.alwaysDrawn.size;\n const currNeverDrawn = new Set(this._props.viewport.neverDrawn ? this._props.viewport.neverDrawn : []);\n const currAlwaysDrawn = new Set(this._props.viewport.alwaysDrawn ?\n this._props.viewport.alwaysDrawn : /* istanbul ignore next */[],\n );\n for await (const elementId of elementIds) {\n if (on) {\n currNeverDrawn.delete(elementId);\n if (!isDisplayedByDefault || isHiddenDueToExclusiveAlwaysDrawnElements)\n currAlwaysDrawn.add(elementId);\n } else {\n currAlwaysDrawn.delete(elementId);\n if (isDisplayedByDefault && !isHiddenDueToExclusiveAlwaysDrawnElements)\n currNeverDrawn.add(elementId);\n }\n }\n this._props.viewport.setNeverDrawn(currNeverDrawn);\n this._props.viewport.setAlwaysDrawn(currAlwaysDrawn, this._props.viewport.isAlwaysDrawnExclusive);\n }\n\n private onVisibilityChangeInternal() {\n if (this._pendingVisibilityChange)\n return;\n\n this._pendingVisibilityChange = setTimeout(() => {\n this.onVisibilityChange.raiseEvent();\n this._pendingVisibilityChange = undefined;\n }, 0);\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private onViewChanged = (_vp: Viewport) => {\n this.onVisibilityChangeInternal();\n };\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private onElementAlwaysDrawnChanged = () => {\n this.onVisibilityChangeInternal();\n };\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private onElementNeverDrawnChanged = () => {\n this.onVisibilityChangeInternal();\n };\n\n private getCategoryParentModelId(categoryNode: TreeNodeItem): Id64String | undefined {\n return categoryNode.extendedData ? categoryNode.extendedData.modelId : /* istanbul ignore next */ undefined;\n }\n\n private getElementModelId(elementNode: TreeNodeItem): Id64String | undefined {\n return elementNode.extendedData ? elementNode.extendedData.modelId : /* istanbul ignore next */ undefined;\n }\n\n private getElementCategoryId(elementNode: TreeNodeItem): Id64String | undefined {\n return elementNode.extendedData ? elementNode.extendedData.categoryId : /* istanbul ignore next */ undefined;\n }\n\n private async getSubjectModelIds(subjectIds: Id64String[]) {\n return (await Promise.all(subjectIds.map(async (id) => this._subjectModelIdsCache.getSubjectModelIds(id))))\n .reduce((allModelIds: Id64String[], curr: Id64String[]) => [...allModelIds, ...curr], []);\n }\n\n // istanbul ignore next\n private getAssemblyElementIds(assemblyId: Id64String) {\n return this._elementIdsCache.getAssemblyElementIds(assemblyId);\n }\n\n // istanbul ignore next\n private async getGroupedElementIds(groupingNodeKey: GroupingNodeKey) {\n return this._elementIdsCache.getGroupedElementIds(groupingNodeKey);\n }\n}\n\n/** @internal */\nexport class SubjectModelIdsCache {\n private _imodel: IModelConnection;\n private _subjectsHierarchy: Map<Id64String, Id64String[]> | undefined;\n private _subjectModels: Map<Id64String, Id64String[]> | undefined;\n private _init: Promise<void> | undefined;\n\n constructor(imodel: IModelConnection) {\n this._imodel = imodel;\n }\n\n private async initSubjectModels() {\n const querySubjects = (): AsyncIterableIterator<{ id: Id64String, parentId?: Id64String, targetPartitionId?: Id64String }> => {\n const subjectsQuery = `\n SELECT ECInstanceId id, Parent.Id parentId, json_extract(JsonProperties, '$.Subject.Model.TargetPartition') targetPartitionId\n FROM bis.Subject\n `;\n return this._imodel.query(subjectsQuery, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\n };\n const queryModels = (): AsyncIterableIterator<{ id: Id64String, parentId: Id64String }> => {\n const modelsQuery = `\n SELECT p.ECInstanceId id, p.Parent.Id parentId\n FROM bis.InformationPartitionElement p\n INNER JOIN bis.GeometricModel3d m ON m.ModeledElement.Id = p.ECInstanceId\n WHERE NOT m.IsPrivate\n `;\n return this._imodel.query(modelsQuery, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames });\n };\n\n function pushToMap<TKey, TValue>(map: Map<TKey, TValue[]>, key: TKey, value: TValue) {\n let list = map.get(key);\n if (!list) {\n list = [];\n map.set(key, list);\n }\n list.push(value);\n }\n\n this._subjectsHierarchy = new Map();\n const targetPartitionSubjects = new Map<Id64String, Id64String[]>();\n for await (const subject of querySubjects()) {\n // istanbul ignore else\n if (subject.parentId)\n pushToMap(this._subjectsHierarchy, subject.parentId, subject.id);\n // istanbul ignore if\n if (subject.targetPartitionId)\n pushToMap(targetPartitionSubjects, subject.targetPartitionId, subject.id);\n }\n\n this._subjectModels = new Map();\n for await (const model of queryModels()) {\n // istanbul ignore next\n const subjectIds = targetPartitionSubjects.get(model.id) ?? [];\n // istanbul ignore else\n if (!subjectIds.includes(model.parentId))\n subjectIds.push(model.parentId);\n\n subjectIds.forEach((subjectId) => {\n pushToMap(this._subjectModels!, subjectId, model.id);\n });\n }\n }\n\n private async initCache() {\n if (!this._init) {\n this._init = this.initSubjectModels().then(() => { });\n }\n return this._init;\n }\n\n private appendSubjectModelsRecursively(modelIds: Id64String[], subjectId: Id64String) {\n const subjectModelIds = this._subjectModels!.get(subjectId);\n if (subjectModelIds)\n modelIds.push(...subjectModelIds);\n\n const childSubjectIds = this._subjectsHierarchy!.get(subjectId);\n if (childSubjectIds)\n childSubjectIds.forEach((cs) => this.appendSubjectModelsRecursively(modelIds, cs));\n }\n\n public async getSubjectModelIds(subjectId: Id64String): Promise<Id64String[]> {\n await this.initCache();\n const modelIds = new Array<Id64String>();\n this.appendSubjectModelsRecursively(modelIds, subjectId);\n return modelIds;\n }\n}\n\ninterface GroupedElementIds {\n modelId?: string;\n categoryId?: string;\n elementIds: CachingElementIdsContainer;\n}\n\n// istanbul ignore next\nclass ElementIdsCache {\n private _assemblyElementIdsCache = new Map<string, CachingElementIdsContainer>();\n private _groupedElementIdsCache = new Map<string, GroupedElementIds>();\n\n constructor(private _imodel: IModelConnection, private _rulesetId: string) {\n }\n\n public clear() {\n this._assemblyElementIdsCache.clear();\n this._groupedElementIdsCache.clear();\n }\n\n public getAssemblyElementIds(assemblyId: Id64String) {\n const ids = this._assemblyElementIdsCache.get(assemblyId);\n if (ids)\n return ids;\n\n const container = createAssemblyElementIdsContainer(this._imodel, this._rulesetId, assemblyId);\n this._assemblyElementIdsCache.set(assemblyId, container);\n return container;\n }\n\n public async getGroupedElementIds(groupingNodeKey: GroupingNodeKey): Promise<GroupedElementIds> {\n const keyString = JSON.stringify(groupingNodeKey);\n const ids = this._groupedElementIdsCache.get(keyString);\n if (ids)\n return ids;\n const info = await createGroupedElementsInfo(this._imodel, this._rulesetId, groupingNodeKey);\n this._groupedElementIdsCache.set(keyString, info);\n return info;\n }\n}\n\n// istanbul ignore next\nasync function* createInstanceIdsGenerator(imodel: IModelConnection, rulesetId: string, displayType: string, inputKeys: Keys) {\n const res = await Presentation.presentation.getContentInstanceKeys({\n imodel,\n rulesetOrId: rulesetId,\n displayType,\n keys: new KeySet(inputKeys),\n });\n for await (const key of res.items()) {\n yield key.id;\n }\n}\n\n// istanbul ignore next\nfunction createAssemblyElementIdsContainer(imodel: IModelConnection, rulesetId: string, assemblyId: Id64String) {\n return new CachingElementIdsContainer(createInstanceIdsGenerator(imodel, rulesetId, \"AssemblyElementsRequest\", [{ className: \"BisCore:Element\", id: assemblyId }]));\n}\n\n// istanbul ignore next\nasync function createGroupedElementsInfo(imodel: IModelConnection, rulesetId: string, groupingNodeKey: GroupingNodeKey) {\n const groupedElementIdsContainer = new CachingElementIdsContainer(createInstanceIdsGenerator(imodel, rulesetId, \"AssemblyElementsRequest\", [groupingNodeKey]));\n const elementId = await groupedElementIdsContainer.getElementIds().next();\n if (elementId.done)\n throw new Error(\"Invalid grouping node key\");\n\n let modelId, categoryId;\n const query = `SELECT Model.Id AS modelId, Category.Id AS categoryId FROM bis.GeometricElement3d WHERE ECInstanceId = ? LIMIT 1`;\n for await (const modelAndCategoryIds of imodel.query(query, QueryBinder.from([elementId.value]), { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n modelId = modelAndCategoryIds.modelId;\n categoryId = modelAndCategoryIds.categoryId;\n break;\n }\n return { modelId, categoryId, elementIds: groupedElementIdsContainer };\n}\n\nconst createTooltip = (status: \"visible\" | \"hidden\" | \"disabled\", tooltipStringId: string | undefined): string => {\n const statusStringId = `modelTree.status.${status}`;\n const statusString = TreeWidget.translate(statusStringId);\n if (!tooltipStringId)\n return statusString;\n\n tooltipStringId = `modelTree.tooltips.${tooltipStringId}`;\n const tooltipString = TreeWidget.translate(tooltipStringId);\n return `${statusString}: ${tooltipString}`;\n};\n"]}
@@ -1,20 +1,22 @@
1
1
  "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
2
6
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
7
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
8
  };
5
9
  Object.defineProperty(exports, "__esModule", { value: true });
6
10
  exports.SpatialTreeComponent = void 0;
7
- /*---------------------------------------------------------------------------------------------
8
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
9
- * See LICENSE.md in the project root for license terms and full copyright notice.
10
- *--------------------------------------------------------------------------------------------*/
11
- const appui_react_1 = require("@itwin/appui-react");
12
11
  const react_1 = __importDefault(require("react"));
12
+ const appui_react_1 = require("@itwin/appui-react");
13
13
  const AutoSizer_1 = require("../../utils/AutoSizer");
14
14
  const SpatialTreeComponent = (props) => {
15
- const iModel = appui_react_1.useActiveIModelConnection();
15
+ const iModel = (0, appui_react_1.useActiveIModelConnection)();
16
16
  return (react_1.default.createElement(react_1.default.Fragment, null, iModel &&
17
- react_1.default.createElement(AutoSizer_1.AutoSizer, null, ({ width, height }) => react_1.default.createElement(appui_react_1.SpatialContainmentTree, { ...props, width: width, height: height, iModel: iModel }))));
17
+ react_1.default.createElement(AutoSizer_1.AutoSizer, null,
18
+ // eslint-disable-next-line deprecation/deprecation
19
+ ({ width, height }) => react_1.default.createElement(appui_react_1.SpatialContainmentTree, { ...props, width: width, height: height, iModel: iModel }))));
18
20
  };
19
21
  exports.SpatialTreeComponent = SpatialTreeComponent;
20
22
  //# sourceMappingURL=SpatialTreeComponent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SpatialTreeComponent.js","sourceRoot":"","sources":["../../../../../src/components/trees/spatial-tree/SpatialTreeComponent.tsx"],"names":[],"mappings":";;;;;;AAAA;;;+FAG+F;AAC/F,oDAAuF;AACvF,kDAA0B;AAE1B,qDAAkD;AAE3C,MAAM,oBAAoB,GAAG,CAClC,KAAuB,EAAE,EAAE;IAC3B,MAAM,MAAM,GAAG,uCAAyB,EAAE,CAAC;IAE3C,OAAO,CACL,8DACG,MAAM;QACL,8BAAC,qBAAS,QACP,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,8BAAC,oCAAsB,OAAK,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAI,CACjG,CAEb,CACJ,CAAC;AACJ,CAAC,CAAC;AAbW,QAAA,oBAAoB,wBAa/B","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*--------------------------------------------------------------------------------------------*/\nimport { SpatialContainmentTree, useActiveIModelConnection } from \"@itwin/appui-react\";\nimport React from \"react\";\nimport type { SpatialTreeProps } from \"../../../types\";\nimport { AutoSizer } from \"../../utils/AutoSizer\";\n\nexport const SpatialTreeComponent = (\n props: SpatialTreeProps) => {\n const iModel = useActiveIModelConnection();\n\n return (\n <>\n {iModel &&\n <AutoSizer>\n {({ width, height }) => <SpatialContainmentTree {...props} width={width} height={height} iModel={iModel} />}\n </AutoSizer>\n }\n </>\n );\n};\n"]}
1
+ {"version":3,"file":"SpatialTreeComponent.js","sourceRoot":"","sources":["../../../../../src/components/trees/spatial-tree/SpatialTreeComponent.tsx"],"names":[],"mappings":";AAAA;;;+FAG+F;;;;;;AAE/F,kDAA0B;AAC1B,oDAAuF;AACvF,qDAAkD;AAI3C,MAAM,oBAAoB,GAAG,CAClC,KAAuB,EAAE,EAAE;IAC3B,MAAM,MAAM,GAAG,IAAA,uCAAyB,GAAE,CAAC;IAE3C,OAAO,CACL,8DACG,MAAM;QACL,8BAAC,qBAAS;QAEN,mDAAmD;QACnD,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,8BAAC,oCAAsB,OAAK,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAI,CAElG,CAEb,CACJ,CAAC;AACJ,CAAC,CAAC;AAhBW,QAAA,oBAAoB,wBAgB/B","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 React from \"react\";\nimport { SpatialContainmentTree, useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { AutoSizer } from \"../../utils/AutoSizer\";\n\nimport type { SpatialTreeProps } from \"../../../types\";\n\nexport const SpatialTreeComponent = (\n props: SpatialTreeProps) => {\n const iModel = useActiveIModelConnection();\n\n return (\n <>\n {iModel &&\n <AutoSizer>\n {\n // eslint-disable-next-line deprecation/deprecation\n ({ width, height }) => <SpatialContainmentTree {...props} width={width} height={height} iModel={iModel} />\n }\n </AutoSizer>\n }\n </>\n );\n};\n"]}