@itwin/tree-widget-react 1.2.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -2
- package/README.md +1 -1
- package/lib/cjs/TreeWidget.d.ts +0 -1
- package/lib/cjs/TreeWidget.js +9 -10
- package/lib/cjs/TreeWidget.js.map +1 -1
- package/lib/cjs/components/SelectableTree.d.ts +9 -1
- package/lib/cjs/components/SelectableTree.js +28 -17
- package/lib/cjs/components/SelectableTree.js.map +1 -1
- package/lib/cjs/components/SelectableTree.scss +0 -16
- package/lib/cjs/components/TreeFilteringState.js +3 -3
- package/lib/cjs/components/TreeFilteringState.js.map +1 -1
- package/lib/cjs/components/TreeSelector.d.ts +28 -0
- package/lib/cjs/components/TreeSelector.js +27 -0
- package/lib/cjs/components/TreeSelector.js.map +1 -0
- package/lib/cjs/components/TreeSelector.scss +27 -0
- package/lib/cjs/components/TreeWidgetUiItemsProvider.d.ts +9 -1
- package/lib/cjs/components/TreeWidgetUiItemsProvider.js +21 -14
- package/lib/cjs/components/TreeWidgetUiItemsProvider.js.map +1 -1
- package/lib/cjs/components/TreeWidgetUiItemsProvider.scss +1 -1
- package/lib/cjs/components/tree-header/TreeHeader.d.ts +3 -0
- package/lib/cjs/components/tree-header/TreeHeader.js +20 -15
- package/lib/cjs/components/tree-header/TreeHeader.js.map +1 -1
- package/lib/cjs/components/tree-header/TreeHeader.scss +29 -1
- package/lib/cjs/components/trees/CategoriesVisibilityUtils.js +13 -8
- package/lib/cjs/components/trees/CategoriesVisibilityUtils.js.map +1 -1
- package/lib/cjs/components/trees/VisibilityTreeBase.scss +1 -1
- package/lib/cjs/components/trees/VisibilityTreeEventHandler.d.ts +1 -1
- package/lib/cjs/components/trees/VisibilityTreeEventHandler.js +18 -10
- package/lib/cjs/components/trees/VisibilityTreeEventHandler.js.map +1 -1
- package/lib/cjs/components/trees/VisibilityTreeRenderer.d.ts +20 -4
- package/lib/cjs/components/trees/VisibilityTreeRenderer.js +28 -10
- package/lib/cjs/components/trees/VisibilityTreeRenderer.js.map +1 -1
- package/lib/cjs/components/trees/category-tree/CategoriesTree.d.ts +7 -2
- package/lib/cjs/components/trees/category-tree/CategoriesTree.js +47 -30
- package/lib/cjs/components/trees/category-tree/CategoriesTree.js.map +1 -1
- package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js +27 -18
- package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js.map +1 -1
- package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.d.ts +2 -2
- package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.js +18 -13
- package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.js.map +1 -1
- package/lib/cjs/components/trees/common/ContextMenu.js +4 -4
- package/lib/cjs/components/trees/common/ContextMenu.js.map +1 -1
- package/lib/cjs/components/trees/common/TreeNodeRenderer.d.ts +1 -1
- package/lib/cjs/components/trees/common/TreeNodeRenderer.js +4 -4
- package/lib/cjs/components/trees/common/TreeNodeRenderer.js.map +1 -1
- package/lib/cjs/components/trees/common/TreeRenderer.d.ts +15 -1
- package/lib/cjs/components/trees/common/TreeRenderer.js +17 -7
- package/lib/cjs/components/trees/common/TreeRenderer.js.map +1 -1
- package/lib/cjs/components/trees/common/TreeRenderer.scss +39 -2
- package/lib/cjs/components/trees/common/Types.d.ts +8 -0
- package/lib/cjs/components/trees/common/Types.js +3 -3
- package/lib/cjs/components/trees/common/Types.js.map +1 -1
- package/lib/cjs/components/trees/common/UseVisibilityTreeState.d.ts +36 -0
- package/lib/cjs/components/trees/common/UseVisibilityTreeState.js +47 -0
- package/lib/cjs/components/trees/common/UseVisibilityTreeState.js.map +1 -0
- package/lib/cjs/components/trees/common/Utils.js +7 -5
- package/lib/cjs/components/trees/common/Utils.js.map +1 -1
- package/lib/cjs/components/trees/external-sources-tree/ExternalSources.json +1 -3
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +9 -3
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js +19 -7
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +4 -4
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.d.ts +9 -3
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js +16 -12
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.js +6 -5
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
- package/lib/cjs/components/trees/index.js +3 -3
- package/lib/cjs/components/trees/index.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/ModelsTree.d.ts +7 -2
- package/lib/cjs/components/trees/models-tree/ModelsTree.js +76 -62
- package/lib/cjs/components/trees/models-tree/ModelsTree.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js +27 -29
- package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.d.ts +9 -0
- package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.js +31 -0
- package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.js.map +1 -0
- package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.js +125 -66
- package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/Utils.d.ts +4 -0
- package/lib/cjs/components/trees/models-tree/Utils.js +52 -58
- package/lib/cjs/components/trees/models-tree/Utils.js.map +1 -1
- package/lib/cjs/components/utils/AutoSizer.js +7 -5
- package/lib/cjs/components/utils/AutoSizer.js.map +1 -1
- package/lib/cjs/components/utils/IsPromiseLike.js +4 -4
- package/lib/cjs/components/utils/IsPromiseLike.js.map +1 -1
- package/lib/cjs/components/utils/UseTreeTransientState.js +3 -3
- package/lib/cjs/components/utils/UseTreeTransientState.js.map +1 -1
- package/lib/cjs/tree-widget-react.js +3 -3
- package/lib/cjs/tree-widget-react.js.map +1 -1
- package/lib/esm/TreeWidget.d.ts +0 -1
- package/lib/esm/TreeWidget.js +9 -10
- package/lib/esm/TreeWidget.js.map +1 -1
- package/lib/esm/components/SelectableTree.d.ts +9 -1
- package/lib/esm/components/SelectableTree.js +28 -17
- package/lib/esm/components/SelectableTree.js.map +1 -1
- package/lib/esm/components/SelectableTree.scss +0 -16
- package/lib/esm/components/TreeFilteringState.js +3 -3
- package/lib/esm/components/TreeFilteringState.js.map +1 -1
- package/lib/esm/components/TreeSelector.d.ts +28 -0
- package/lib/esm/components/TreeSelector.js +23 -0
- package/lib/esm/components/TreeSelector.js.map +1 -0
- package/lib/esm/components/TreeSelector.scss +27 -0
- package/lib/esm/components/TreeWidgetUiItemsProvider.d.ts +9 -1
- package/lib/esm/components/TreeWidgetUiItemsProvider.js +19 -13
- package/lib/esm/components/TreeWidgetUiItemsProvider.js.map +1 -1
- package/lib/esm/components/TreeWidgetUiItemsProvider.scss +1 -1
- package/lib/esm/components/tree-header/TreeHeader.d.ts +3 -0
- package/lib/esm/components/tree-header/TreeHeader.js +20 -15
- package/lib/esm/components/tree-header/TreeHeader.js.map +1 -1
- package/lib/esm/components/tree-header/TreeHeader.scss +29 -1
- package/lib/esm/components/trees/CategoriesVisibilityUtils.js +13 -8
- package/lib/esm/components/trees/CategoriesVisibilityUtils.js.map +1 -1
- package/lib/esm/components/trees/VisibilityTreeBase.scss +1 -1
- package/lib/esm/components/trees/VisibilityTreeEventHandler.d.ts +1 -1
- package/lib/esm/components/trees/VisibilityTreeEventHandler.js +18 -10
- package/lib/esm/components/trees/VisibilityTreeEventHandler.js.map +1 -1
- package/lib/esm/components/trees/VisibilityTreeRenderer.d.ts +20 -4
- package/lib/esm/components/trees/VisibilityTreeRenderer.js +27 -10
- package/lib/esm/components/trees/VisibilityTreeRenderer.js.map +1 -1
- package/lib/esm/components/trees/category-tree/CategoriesTree.d.ts +7 -2
- package/lib/esm/components/trees/category-tree/CategoriesTree.js +51 -34
- package/lib/esm/components/trees/category-tree/CategoriesTree.js.map +1 -1
- package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js +24 -18
- package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js.map +1 -1
- package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.d.ts +2 -2
- package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.js +18 -13
- package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.js.map +1 -1
- package/lib/esm/components/trees/common/ContextMenu.js +4 -4
- package/lib/esm/components/trees/common/ContextMenu.js.map +1 -1
- package/lib/esm/components/trees/common/TreeNodeRenderer.d.ts +1 -1
- package/lib/esm/components/trees/common/TreeNodeRenderer.js +4 -4
- package/lib/esm/components/trees/common/TreeNodeRenderer.js.map +1 -1
- package/lib/esm/components/trees/common/TreeRenderer.d.ts +15 -1
- package/lib/esm/components/trees/common/TreeRenderer.js +15 -6
- package/lib/esm/components/trees/common/TreeRenderer.js.map +1 -1
- package/lib/esm/components/trees/common/TreeRenderer.scss +39 -2
- package/lib/esm/components/trees/common/Types.d.ts +8 -0
- package/lib/esm/components/trees/common/Types.js +3 -3
- package/lib/esm/components/trees/common/Types.js.map +1 -1
- package/lib/esm/components/trees/common/UseVisibilityTreeState.d.ts +36 -0
- package/lib/esm/components/trees/common/UseVisibilityTreeState.js +43 -0
- package/lib/esm/components/trees/common/UseVisibilityTreeState.js.map +1 -0
- package/lib/esm/components/trees/common/Utils.js +7 -5
- package/lib/esm/components/trees/common/Utils.js.map +1 -1
- package/lib/esm/components/trees/external-sources-tree/ExternalSources.json +1 -3
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +9 -3
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js +22 -10
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +4 -4
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.d.ts +9 -3
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js +19 -15
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.js +6 -5
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
- package/lib/esm/components/trees/index.js +3 -3
- package/lib/esm/components/trees/index.js.map +1 -1
- package/lib/esm/components/trees/models-tree/ModelsTree.d.ts +7 -2
- package/lib/esm/components/trees/models-tree/ModelsTree.js +80 -66
- package/lib/esm/components/trees/models-tree/ModelsTree.js.map +1 -1
- package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js +25 -30
- package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.d.ts +9 -0
- package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.js +27 -0
- package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.js.map +1 -0
- package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.js +125 -66
- package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.js.map +1 -1
- package/lib/esm/components/trees/models-tree/Utils.d.ts +4 -0
- package/lib/esm/components/trees/models-tree/Utils.js +50 -57
- package/lib/esm/components/trees/models-tree/Utils.js.map +1 -1
- package/lib/esm/components/utils/AutoSizer.js +7 -5
- package/lib/esm/components/utils/AutoSizer.js.map +1 -1
- package/lib/esm/components/utils/IsPromiseLike.js +4 -4
- package/lib/esm/components/utils/IsPromiseLike.js.map +1 -1
- package/lib/esm/components/utils/UseTreeTransientState.js +3 -3
- package/lib/esm/components/utils/UseTreeTransientState.js.map +1 -1
- package/lib/esm/tree-widget-react.js +3 -3
- package/lib/esm/tree-widget-react.js.map +1 -1
- package/lib/public/locales/en/TreeWidget.json +1 -0
- package/package.json +47 -46
- package/lib/cjs/e2e-tests/TreeWidget.test.d.ts +0 -2
- package/lib/cjs/e2e-tests/TreeWidget.test.js +0 -51
- package/lib/cjs/e2e-tests/TreeWidget.test.js.map +0 -1
- package/lib/cjs/e2e-tests/utils.d.ts +0 -9
- package/lib/cjs/e2e-tests/utils.js +0 -51
- package/lib/cjs/e2e-tests/utils.js.map +0 -1
- package/lib/esm/e2e-tests/TreeWidget.test.d.ts +0 -2
- package/lib/esm/e2e-tests/TreeWidget.test.js +0 -46
- package/lib/esm/e2e-tests/TreeWidget.test.js.map +0 -1
- package/lib/esm/e2e-tests/utils.d.ts +0 -9
- package/lib/esm/e2e-tests/utils.js +0 -40
- package/lib/esm/e2e-tests/utils.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,36 @@
|
|
|
1
1
|
# Change Log - @itwin/tree-widget-react
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Wed, 06 Mar 2024 15:24:12 GMT and should not be manually modified.
|
|
4
4
|
|
|
5
5
|
<!-- Start content -->
|
|
6
6
|
|
|
7
|
+
## 2.0.0
|
|
8
|
+
|
|
9
|
+
Wed, 06 Mar 2024 15:24:12 GMT
|
|
10
|
+
|
|
11
|
+
### Major changes
|
|
12
|
+
|
|
13
|
+
- Update `@itwin/itwinui-react` dependency to `3.x` ([#771](https://github.com/iTwin/viewer-components-react/pull/771))
|
|
14
|
+
- Bumped `@itwin/presentation-components` peer dependency version to `^5.0.0`. ([#789](https://github.com/iTwin/viewer-components-react/pull/789))
|
|
15
|
+
- Bumped AppUI peer dependencies version to `^4.10.0`. ([#789](https://github.com/iTwin/viewer-components-react/pull/789))
|
|
16
|
+
|
|
17
|
+
### Minor changes
|
|
18
|
+
|
|
19
|
+
- Tree Widget: Updated header and its content to be touch friendly when using expanded layout. ([#782](https://github.com/iTwin/viewer-components-react/pull/782))
|
|
20
|
+
- Added React 18 support. ([#728](https://github.com/iTwin/viewer-components-react/pull/728))
|
|
21
|
+
- Models Tree: zoom to viewport element on node double-click. ([#704](https://github.com/iTwin/viewer-components-react/pull/704))
|
|
22
|
+
- Tree Widget: allow opt-in to hierarchy level size limiting. ([#761](https://github.com/iTwin/viewer-components-react/pull/761))
|
|
23
|
+
- Tree Widget: Allow opt-in to hierarchy level filtering using `isHierarchyLevelFilteringEnabled` flag for all trees. Add support for `enlarged` nodes in non-visibility trees. ([#751](https://github.com/iTwin/viewer-components-react/pull/751))
|
|
24
|
+
- Move `VisibilityTreeEventHandler.onNodeDoubleClick` event handler to newly added `ModelsTreeEventHandler`. Expand `useVisibilityTreeState` hook to support custom `VisibilityTreeEventHandler`'s. ([#741](https://github.com/iTwin/viewer-components-react/pull/741))
|
|
25
|
+
|
|
26
|
+
### Patches
|
|
27
|
+
|
|
28
|
+
- Models Tree: For all header actions only consider Models that model either `InformationPartitionElement` or `GeometricElement3d`. This should omit Models that are not displayed in the component. ([#738](https://github.com/iTwin/viewer-components-react/pull/738))
|
|
29
|
+
- Fixed progress indicator positioning in enlarged tree layout. ([#790](https://github.com/iTwin/viewer-components-react/pull/790))
|
|
30
|
+
|
|
7
31
|
## 1.2.2
|
|
8
32
|
|
|
9
|
-
Tue, 30 Jan 2024 13:20:
|
|
33
|
+
Tue, 30 Jan 2024 13:20:38 GMT
|
|
10
34
|
|
|
11
35
|
### Patches
|
|
12
36
|
|
package/README.md
CHANGED
|
@@ -71,7 +71,7 @@ While we expect this package to be mostly used with [AppUI](https://github.com/i
|
|
|
71
71
|
- `createVisibilityTreeRenderer` returns a tree renderer that renders nodes with "eye" checkboxes. Its building blocks:
|
|
72
72
|
- `createVisibilityTreeNodeRenderer`
|
|
73
73
|
- `VisibilityTreeNodeCheckbox`
|
|
74
|
-
- `
|
|
74
|
+
- `useVisibilityTreeState` is used to create and manage tree state.
|
|
75
75
|
- `VisibilityTreeNoFilteredData` is used to render a "no results" when filtering.
|
|
76
76
|
- `VisibilityTreeEventHandler` is an extension of [UnifiedSelectionTreeEventHandler](https://www.itwinjs.org/reference/presentation-components/tree/unifiedselectiontreeeventhandler/), that additionally handles checkbox events and calls provided `IVisibilityHandler` to get/set display of the elements in the hierarchy.
|
|
77
77
|
- `useTreeTransientState` is used to persist tree scroll position when tree is used in [AppUI](https://github.com/iTwin/appui/tree/master/ui/appui-react) widget.
|
package/lib/cjs/TreeWidget.d.ts
CHANGED
|
@@ -19,7 +19,6 @@ export declare class TreeWidget {
|
|
|
19
19
|
static get i18n(): Localization;
|
|
20
20
|
/** The internationalization service namespace. */
|
|
21
21
|
static get i18nNamespace(): string;
|
|
22
|
-
static get packageName(): string;
|
|
23
22
|
/** Calls i18n.translateWithNamespace with the "TreeWidget" namespace. Do NOT include the namespace in the key.
|
|
24
23
|
*/
|
|
25
24
|
static translate(key: string | string[], options?: LocalizationOptions): string;
|
package/lib/cjs/TreeWidget.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
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
|
-
*--------------------------------------------------------------------------------------------*/
|
|
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
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.TreeWidget = void 0;
|
|
8
|
-
const
|
|
8
|
+
const core_common_1 = require("@itwin/core-common");
|
|
9
9
|
const core_frontend_1 = require("@itwin/core-frontend");
|
|
10
10
|
const Utils_1 = require("./components/trees/common/Utils");
|
|
11
11
|
/**
|
|
@@ -18,8 +18,9 @@ class TreeWidget {
|
|
|
18
18
|
* @param i18n - The internationalization service created by the IModelApp.
|
|
19
19
|
*/
|
|
20
20
|
static async initialize(i18n) {
|
|
21
|
-
if (this._initialized)
|
|
21
|
+
if (this._initialized) {
|
|
22
22
|
return;
|
|
23
|
+
}
|
|
23
24
|
TreeWidget._initialized = true;
|
|
24
25
|
TreeWidget._i18n = i18n ?? core_frontend_1.IModelApp.localization;
|
|
25
26
|
TreeWidget._dispose = (0, Utils_1.registerRenderers)();
|
|
@@ -39,17 +40,15 @@ class TreeWidget {
|
|
|
39
40
|
}
|
|
40
41
|
/** The internationalization service created by the IModelApp. */
|
|
41
42
|
static get i18n() {
|
|
42
|
-
if (!TreeWidget._i18n)
|
|
43
|
-
throw new
|
|
43
|
+
if (!TreeWidget._i18n) {
|
|
44
|
+
throw new core_common_1.BentleyError(core_common_1.BentleyStatus.ERROR, "TreeWidget not initialized");
|
|
45
|
+
}
|
|
44
46
|
return TreeWidget._i18n;
|
|
45
47
|
}
|
|
46
48
|
/** The internationalization service namespace. */
|
|
47
49
|
static get i18nNamespace() {
|
|
48
50
|
return "TreeWidget";
|
|
49
51
|
}
|
|
50
|
-
static get packageName() {
|
|
51
|
-
return "tree-widget-react";
|
|
52
|
-
}
|
|
53
52
|
/** Calls i18n.translateWithNamespace with the "TreeWidget" namespace. Do NOT include the namespace in the key.
|
|
54
53
|
*/
|
|
55
54
|
static translate(key, options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeWidget.js","sourceRoot":"","sources":["../../src/TreeWidget.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"TreeWidget.js","sourceRoot":"","sources":["../../src/TreeWidget.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAGhG,oDAAiE;AACjE,wDAAiD;AACjD,2DAAoE;AAIpE;;;GAGG;AACH,MAAa,UAAU;IAKrB;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAmB;QAChD,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,OAAO;SACR;QAED,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;QAC/B,UAAU,CAAC,KAAK,GAAG,IAAI,IAAI,yBAAS,CAAC,YAAY,CAAC;QAClD,UAAU,CAAC,QAAQ,GAAG,IAAA,yBAAiB,GAAE,CAAC;QAC1C,OAAO,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACtE,CAAC;IAED,wEAAwE;IACjE,MAAM,CAAC,SAAS;QACrB,IAAI,UAAU,CAAC,KAAK,EAAE;YACpB,UAAU,CAAC,KAAK,CAAC,mBAAmB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YAC/D,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;SAC9B;QAED,IAAI,UAAU,CAAC,QAAQ,EAAE;YACvB,UAAU,CAAC,QAAQ,EAAE,CAAC;YACtB,UAAU,CAAC,QAAQ,GAAG,SAAS,CAAC;SACjC;QAED,UAAU,CAAC,YAAY,GAAG,KAAK,CAAC;IAClC,CAAC;IAED,iEAAiE;IAC1D,MAAM,KAAK,IAAI;QACpB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;YACrB,MAAM,IAAI,0BAAY,CAAC,2BAAa,CAAC,KAAK,EAAE,4BAA4B,CAAC,CAAC;SAC3E;QACD,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED,kDAAkD;IAC3C,MAAM,KAAK,aAAa;QAC7B,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;OACG;IACI,MAAM,CAAC,SAAS,CAAC,GAAsB,EAAE,OAA6B;QAC3E,MAAM,SAAS,GAAG,GAAG,UAAU,CAAC,aAAa,IAAI,GAAG,EAAE,CAAC;QACvD,OAAO,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;CACF;AAtDD,gCAsDC","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 { Localization } from \"@itwin/core-common\";\nimport { BentleyError, BentleyStatus } from \"@itwin/core-common\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { registerRenderers } from \"./components/trees/common/Utils\";\n\nimport type { LocalizationOptions } from \"@itwin/core-i18n\";\n\n/**\n * Entry point for static initialization required by various components used in the package.\n * @public\n */\nexport class TreeWidget {\n private static _i18n?: Localization;\n private static _initialized?: boolean;\n private static _dispose?: () => void;\n\n /**\n * Called by IModelApp to initialize the Tree Widget\n * @param i18n - The internationalization service created by the IModelApp.\n */\n public static async initialize(i18n?: Localization): Promise<void> {\n if (this._initialized) {\n return;\n }\n\n TreeWidget._initialized = true;\n TreeWidget._i18n = i18n ?? IModelApp.localization;\n TreeWidget._dispose = registerRenderers();\n return TreeWidget._i18n.registerNamespace(TreeWidget.i18nNamespace);\n }\n\n /** Unregisters the TreeWidget internationalization service namespace */\n public static terminate() {\n if (TreeWidget._i18n) {\n TreeWidget._i18n.unregisterNamespace(TreeWidget.i18nNamespace);\n TreeWidget._i18n = undefined;\n }\n\n if (TreeWidget._dispose) {\n TreeWidget._dispose();\n TreeWidget._dispose = undefined;\n }\n\n TreeWidget._initialized = false;\n }\n\n /** The internationalization service created by the IModelApp. */\n public static get i18n(): Localization {\n if (!TreeWidget._i18n) {\n throw new BentleyError(BentleyStatus.ERROR, \"TreeWidget not initialized\");\n }\n return TreeWidget._i18n;\n }\n\n /** The internationalization service namespace. */\n public static get i18nNamespace(): string {\n return \"TreeWidget\";\n }\n\n /** Calls i18n.translateWithNamespace with the \"TreeWidget\" namespace. Do NOT include the namespace in the key.\n */\n public static translate(key: string | string[], options?: LocalizationOptions): string {\n const stringKey = `${TreeWidget.i18nNamespace}:${key}`;\n return TreeWidget.i18n.getLocalizedString(stringKey, options);\n }\n}\n"]}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import "./SelectableTree.scss";
|
|
3
3
|
import type { IModelConnection } from "@itwin/core-frontend";
|
|
4
|
+
/**
|
|
5
|
+
* Props for rendering trees
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export interface TreeRenderProps {
|
|
9
|
+
density?: "enlarged" | "default";
|
|
10
|
+
}
|
|
4
11
|
/**
|
|
5
12
|
* Definition of a tree component displayed in [[SelectableTree]]
|
|
6
13
|
* @public
|
|
@@ -11,7 +18,7 @@ export interface TreeDefinition {
|
|
|
11
18
|
/** Callback that is used to get tree label */
|
|
12
19
|
getLabel: () => string;
|
|
13
20
|
/** Callback that is used to render tree component */
|
|
14
|
-
render: () => React.ReactNode;
|
|
21
|
+
render: (props: TreeRenderProps) => React.ReactNode;
|
|
15
22
|
/**
|
|
16
23
|
* Callback that is used to determine if tree should be shown for current active iModel connection.
|
|
17
24
|
* If callback is `undefined` tree is shown for all iModel connections.
|
|
@@ -24,6 +31,7 @@ export interface TreeDefinition {
|
|
|
24
31
|
*/
|
|
25
32
|
export interface SelectableTreeProps {
|
|
26
33
|
trees: TreeDefinition[];
|
|
34
|
+
density?: "enlarged" | "default";
|
|
27
35
|
}
|
|
28
36
|
/**
|
|
29
37
|
* A component that renders a tree (combo box) selector and the selected tree component.
|
|
@@ -3,44 +3,47 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.SelectableTree = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
/*---------------------------------------------------------------------------------------------
|
|
6
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
7
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
8
|
-
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
7
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
8
|
+
*--------------------------------------------------------------------------------------------*/
|
|
9
9
|
require("./SelectableTree.scss");
|
|
10
10
|
const react_1 = require("react");
|
|
11
11
|
const appui_react_1 = require("@itwin/appui-react");
|
|
12
|
-
const components_react_1 = require("@itwin/components-react");
|
|
13
12
|
const core_react_1 = require("@itwin/core-react");
|
|
14
13
|
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
15
14
|
const TreeWidget_1 = require("../TreeWidget");
|
|
15
|
+
const TreeSelector_1 = require("./TreeSelector");
|
|
16
16
|
/**
|
|
17
17
|
* A component that renders a tree (combo box) selector and the selected tree component.
|
|
18
18
|
* @public
|
|
19
19
|
*/
|
|
20
20
|
function SelectableTree(props) {
|
|
21
21
|
const imodel = (0, appui_react_1.useActiveIModelConnection)();
|
|
22
|
-
if (!imodel)
|
|
22
|
+
if (!imodel) {
|
|
23
23
|
return null;
|
|
24
|
+
}
|
|
24
25
|
return (0, jsx_runtime_1.jsx)(SelectableTreeContent, { ...props, imodel: imodel });
|
|
25
26
|
}
|
|
26
27
|
exports.SelectableTree = SelectableTree;
|
|
27
28
|
function SelectableTreeContent(props) {
|
|
28
29
|
const { trees: treeDefinitions, imodel } = props;
|
|
29
30
|
const trees = useActiveTrees(treeDefinitions, imodel);
|
|
30
|
-
return ((0, jsx_runtime_1.jsx)("div", { className: "tree-widget-selectable-tree", children: (0, jsx_runtime_1.jsx)(
|
|
31
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "tree-widget-selectable-tree", children: (0, jsx_runtime_1.jsx)(TreeSelector_1.TreeSelector, { ...getTreeSelectorProps(trees), density: props.density }) }));
|
|
31
32
|
}
|
|
32
33
|
function useActiveTrees(treeDefinitions, imodel) {
|
|
33
34
|
const [trees, setTrees] = (0, react_1.useState)();
|
|
34
35
|
(0, react_1.useEffect)(() => {
|
|
35
36
|
let disposed = false;
|
|
36
|
-
(async () => {
|
|
37
|
+
void (async () => {
|
|
37
38
|
const visibleTrees = await getActiveTrees(treeDefinitions, imodel);
|
|
38
39
|
// istanbul ignore else
|
|
39
40
|
if (!disposed) {
|
|
40
41
|
setTrees(visibleTrees);
|
|
41
42
|
}
|
|
42
43
|
})();
|
|
43
|
-
return () => {
|
|
44
|
+
return () => {
|
|
45
|
+
disposed = true;
|
|
46
|
+
};
|
|
44
47
|
}, [treeDefinitions, imodel]);
|
|
45
48
|
return trees;
|
|
46
49
|
}
|
|
@@ -57,37 +60,45 @@ async function getActiveTrees(treeDefinitions, imodel) {
|
|
|
57
60
|
};
|
|
58
61
|
return (await Promise.all(treeDefinitions.map(handleDefinition))).filter((tree) => tree !== undefined);
|
|
59
62
|
}
|
|
60
|
-
function
|
|
63
|
+
function getTreeSelectorProps(trees) {
|
|
61
64
|
if (trees === undefined) {
|
|
62
65
|
return {
|
|
63
66
|
defaultSelectedContentId: "loading",
|
|
64
|
-
|
|
67
|
+
trees: [
|
|
68
|
+
{
|
|
65
69
|
id: "loading",
|
|
66
70
|
label: "",
|
|
67
71
|
render: () => ((0, jsx_runtime_1.jsx)(Delayed, { children: (0, jsx_runtime_1.jsx)(itwinui_react_1.ProgressLinear, { indeterminate: true }) })),
|
|
68
|
-
}
|
|
72
|
+
},
|
|
73
|
+
],
|
|
69
74
|
};
|
|
70
75
|
}
|
|
71
76
|
if (trees.length === 0) {
|
|
72
77
|
return {
|
|
73
78
|
defaultSelectedContentId: "no-trees",
|
|
74
|
-
|
|
79
|
+
trees: [
|
|
80
|
+
{
|
|
75
81
|
id: "no-trees",
|
|
76
82
|
label: "",
|
|
77
|
-
render: () => (
|
|
78
|
-
}
|
|
83
|
+
render: () => (0, jsx_runtime_1.jsx)(core_react_1.FillCentered, { children: TreeWidget_1.TreeWidget.translate("noTrees") }),
|
|
84
|
+
},
|
|
85
|
+
],
|
|
79
86
|
};
|
|
80
87
|
}
|
|
81
88
|
return {
|
|
82
89
|
defaultSelectedContentId: trees[0].id,
|
|
83
|
-
|
|
90
|
+
trees,
|
|
84
91
|
};
|
|
85
92
|
}
|
|
86
93
|
function Delayed({ delay = 200, children }) {
|
|
87
94
|
const [show, setShow] = (0, react_1.useState)(false);
|
|
88
95
|
(0, react_1.useEffect)(() => {
|
|
89
|
-
const id = setTimeout(() => {
|
|
90
|
-
|
|
96
|
+
const id = setTimeout(() => {
|
|
97
|
+
setShow(true);
|
|
98
|
+
}, delay);
|
|
99
|
+
return () => {
|
|
100
|
+
clearTimeout(id);
|
|
101
|
+
};
|
|
91
102
|
}, [delay]);
|
|
92
103
|
if (!show) {
|
|
93
104
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectableTree.js","sourceRoot":"","sources":["../../../src/components/SelectableTree.tsx"],"names":[],"mappings":";;;;AAAA
|
|
1
|
+
{"version":3,"file":"SelectableTree.js","sourceRoot":"","sources":["../../../src/components/SelectableTree.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 \"./SelectableTree.scss\";\nimport { useEffect, useState } from \"react\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { FillCentered } from \"@itwin/core-react\";\nimport { ProgressLinear } from \"@itwin/itwinui-react\";\nimport { TreeWidget } from \"../TreeWidget\";\n\nimport type { PropsWithChildren } from \"react\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type { TreeContentDefinition, TreeSelectorProps } from \"./TreeSelector\";\nimport { TreeSelector } from \"./TreeSelector\";\n\n/**\n * Props for rendering trees\n * @public\n */\nexport interface TreeRenderProps {\n density?: \"enlarged\" | \"default\";\n}\n\n/**\n * Definition of a tree component displayed in [[SelectableTree]]\n * @public\n */\nexport interface TreeDefinition {\n /** Id of the tree */\n id: string;\n /** Callback that is used to get tree label */\n getLabel: () => string;\n /** Callback that is used to render tree component */\n render: (props: TreeRenderProps) => React.ReactNode;\n /**\n * Callback that is used to determine if tree should be shown for current active iModel connection.\n * If callback is `undefined` tree is shown for all iModel connections.\n */\n shouldShow?: (imodel: IModelConnection) => Promise<boolean>;\n}\n\n/**\n * Props for [[SelectableTree]]\n * @public\n */\nexport interface SelectableTreeProps {\n trees: TreeDefinition[];\n density?: \"enlarged\" | \"default\";\n}\n\n/**\n * A component that renders a tree (combo box) selector and the selected tree component.\n * @public\n */\nexport function SelectableTree(props: SelectableTreeProps) {\n const imodel = useActiveIModelConnection();\n\n if (!imodel) {\n return null;\n }\n\n return <SelectableTreeContent {...props} imodel={imodel} />;\n}\n\nfunction SelectableTreeContent(props: SelectableTreeProps & { imodel: IModelConnection }) {\n const { trees: treeDefinitions, imodel } = props;\n const trees = useActiveTrees(treeDefinitions, imodel);\n\n return (\n <div className=\"tree-widget-selectable-tree\">\n <TreeSelector {...getTreeSelectorProps(trees)} density={props.density} />\n </div>\n );\n}\n\nfunction useActiveTrees(treeDefinitions: TreeDefinition[], imodel: IModelConnection) {\n const [trees, setTrees] = useState<TreeContentDefinition[]>();\n\n useEffect(() => {\n let disposed = false;\n void (async () => {\n const visibleTrees = await getActiveTrees(treeDefinitions, imodel);\n // istanbul ignore else\n if (!disposed) {\n setTrees(visibleTrees);\n }\n })();\n\n return () => {\n disposed = true;\n };\n }, [treeDefinitions, imodel]);\n\n return trees;\n}\n\nasync function getActiveTrees(treeDefinitions: TreeDefinition[], imodel: IModelConnection): Promise<TreeContentDefinition[]> {\n const handleDefinition = async (treeDef: TreeDefinition) => {\n if (treeDef.shouldShow !== undefined && !(await treeDef.shouldShow(imodel))) {\n return undefined;\n }\n return {\n id: treeDef.id,\n label: treeDef.getLabel(),\n render: treeDef.render,\n };\n };\n\n return (await Promise.all(treeDefinitions.map(handleDefinition))).filter((tree) => tree !== undefined) as TreeContentDefinition[];\n}\n\nfunction getTreeSelectorProps(trees?: TreeContentDefinition[]): TreeSelectorProps {\n if (trees === undefined) {\n return {\n defaultSelectedContentId: \"loading\",\n trees: [\n {\n id: \"loading\",\n label: \"\",\n render: () => (\n <Delayed>\n <ProgressLinear indeterminate={true} />\n </Delayed>\n ),\n },\n ],\n };\n }\n\n if (trees.length === 0) {\n return {\n defaultSelectedContentId: \"no-trees\",\n trees: [\n {\n id: \"no-trees\",\n label: \"\",\n render: () => <FillCentered>{TreeWidget.translate(\"noTrees\")}</FillCentered>,\n },\n ],\n };\n }\n\n return {\n defaultSelectedContentId: trees[0].id,\n trees,\n };\n}\n\nfunction Delayed({ delay = 200, children }: PropsWithChildren<{ delay?: number }>) {\n const [show, setShow] = useState(false);\n\n useEffect(() => {\n const id = setTimeout(() => {\n setShow(true);\n }, delay);\n return () => {\n clearTimeout(id);\n };\n }, [delay]);\n\n if (!show) {\n return null;\n }\n\n return <>{children}</>;\n}\n"]}
|
|
@@ -10,20 +10,4 @@
|
|
|
10
10
|
box-sizing: border-box;
|
|
11
11
|
display: flex;
|
|
12
12
|
flex-direction: column;
|
|
13
|
-
|
|
14
|
-
.components-selectable-content {
|
|
15
|
-
flex: 1;
|
|
16
|
-
overflow: hidden;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
.components-selectable-content-header {
|
|
20
|
-
padding-bottom: var(--iui-size-2xs);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
.components-selectable-content-wrapper {
|
|
24
|
-
display: flex;
|
|
25
|
-
flex-direction: column;
|
|
26
|
-
flex-grow: 1;
|
|
27
|
-
height: 100%;
|
|
28
|
-
}
|
|
29
13
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
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
|
-
*--------------------------------------------------------------------------------------------*/
|
|
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
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.useTreeFilteringState = void 0;
|
|
8
8
|
const react_1 = require("react");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeFilteringState.js","sourceRoot":"","sources":["../../../src/components/TreeFilteringState.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"TreeFilteringState.js","sourceRoot":"","sources":["../../../src/components/TreeFilteringState.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG,iCAA8C;AAqB9C,gBAAgB;AACT,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACxC,MAAM,CAAC,EAAE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAqB,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;IAEhJ,MAAM,cAAc,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QACtC,QAAQ,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;IACjC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,aAAa,GAAG,IAAA,mBAAW,EAAC,CAAC,SAAiB,EAAE,EAAE;QACtD,QAAQ,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;IACxC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,uBAAuB,GAAG,IAAA,mBAAW,EAAC,CAAC,KAAa,EAAE,EAAE;QAC5D,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,eAAe,GAAG,IAAA,mBAAW,EAAC,CAAC,QAAuC,EAAE,OAAe,EAAE,EAAE;QAC/F,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClB,GAAG,IAAI;YACP,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC;YACpG,kBAAkB,EAAE,OAAO;YAC3B,gBAAgB,EAAE,QAAQ;SAC3B,CAAC,CAAC,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,WAAW,GAAG,CAAC,CAAC,YAAY,IAAI,kBAAkB,KAAK,SAAS,CAAC;IACvE,MAAM,aAAa,GAAkB;QACnC,WAAW;QACX,cAAc;QACd,aAAa;QACb,uBAAuB;QACvB,kBAAkB;QAClB,gBAAgB;KACjB,CAAC;IAEF,OAAO;QACL,aAAa;QACb,YAAY;QACZ,eAAe;QACf,gBAAgB;KACjB,CAAC;AACJ,CAAC,CAAC;AAxCW,QAAA,qBAAqB,yBAwChC","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 { useCallback, useState } from \"react\";\n\nimport type { IPresentationTreeDataProvider } from \"@itwin/presentation-components\";\n\n/** @internal */\nexport interface SearchOptions {\n isFiltering: boolean;\n onFilterCancel: () => void;\n onFilterStart: (newFilter: string) => void;\n onResultSelectedChanged: (index: number) => void;\n matchedResultCount: number | undefined;\n activeMatchIndex: number | undefined;\n}\n\ninterface TreeFilteringState {\n filterString: string;\n matchedResultCount?: number;\n activeMatchIndex?: number;\n filteredProvider?: IPresentationTreeDataProvider;\n}\n\n/** @internal */\nexport const useTreeFilteringState = () => {\n const [{ filterString, matchedResultCount, activeMatchIndex, filteredProvider }, setState] = useState<TreeFilteringState>({ filterString: \"\" });\n\n const onFilterCancel = useCallback(() => {\n setState({ filterString: \"\" });\n }, []);\n\n const onFilterStart = useCallback((newFilter: string) => {\n setState({ filterString: newFilter });\n }, []);\n\n const onResultSelectedChanged = useCallback((index: number) => {\n setState((prev) => ({ ...prev, activeMatchIndex: index }));\n }, []);\n\n const onFilterApplied = useCallback((provider: IPresentationTreeDataProvider, matches: number) => {\n setState((prev) => ({\n ...prev,\n activeMatchIndex: prev.activeMatchIndex === undefined ? 1 : Math.min(prev.activeMatchIndex, matches),\n matchedResultCount: matches,\n filteredProvider: provider,\n }));\n }, []);\n\n const isFiltering = !!filterString && matchedResultCount === undefined;\n const searchOptions: SearchOptions = {\n isFiltering,\n onFilterCancel,\n onFilterStart,\n onResultSelectedChanged,\n matchedResultCount,\n activeMatchIndex,\n };\n\n return {\n searchOptions,\n filterString,\n onFilterApplied,\n filteredProvider,\n };\n};\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import "./TreeSelector.scss";
|
|
3
|
+
import type { TreeRenderProps } from "./SelectableTree";
|
|
4
|
+
/**
|
|
5
|
+
* A definition for trees displayed in [[TreeSelector]]
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export interface TreeContentDefinition {
|
|
9
|
+
id: string;
|
|
10
|
+
label: string;
|
|
11
|
+
render: (props: TreeRenderProps) => React.ReactNode;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Props for [[TreeSelector]]
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
export interface TreeSelectorProps {
|
|
18
|
+
defaultSelectedContentId: string;
|
|
19
|
+
trees: TreeContentDefinition[];
|
|
20
|
+
density?: "enlarged" | "default";
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A component that accepts a list of trees and renders a select box at the top,
|
|
24
|
+
* allowing to choose which of the provided tree components should be rendered at the bottom.
|
|
25
|
+
* @internal
|
|
26
|
+
*/
|
|
27
|
+
export declare function TreeSelector(props: TreeSelectorProps): JSX.Element;
|
|
28
|
+
//# sourceMappingURL=TreeSelector.d.ts.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TreeSelector = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
/*---------------------------------------------------------------------------------------------
|
|
6
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
7
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
8
|
+
*--------------------------------------------------------------------------------------------*/
|
|
9
|
+
require("./TreeSelector.scss");
|
|
10
|
+
const react_1 = require("react");
|
|
11
|
+
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
12
|
+
/**
|
|
13
|
+
* A component that accepts a list of trees and renders a select box at the top,
|
|
14
|
+
* allowing to choose which of the provided tree components should be rendered at the bottom.
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
function TreeSelector(props) {
|
|
18
|
+
const [selectedContentId, setSelectedContentId] = (0, react_1.useState)(props.defaultSelectedContentId);
|
|
19
|
+
const selectedContent = props.trees.find((c) => c.id === selectedContentId) ?? props.trees[0];
|
|
20
|
+
const isEnlarged = props.density === "enlarged";
|
|
21
|
+
const options = (0, react_1.useMemo)(() => {
|
|
22
|
+
return props.trees.map((c) => ({ label: c.label, value: c.id }));
|
|
23
|
+
}, [props.trees]);
|
|
24
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "presentation-components-tree-selector-content", children: [(0, jsx_runtime_1.jsx)("div", { className: "presentation-components-tree-selector-content-header", children: options.length > 0 && ((0, jsx_runtime_1.jsx)(itwinui_react_1.Select, { onChange: setSelectedContentId, options: options, value: selectedContent.id, size: isEnlarged ? "large" : "small", itemRenderer: (option, itemProps) => ((0, jsx_runtime_1.jsx)(itwinui_react_1.MenuItem, { ...option, isSelected: itemProps.isSelected, size: isEnlarged ? "large" : "default", children: option.label })) })) }), (0, jsx_runtime_1.jsx)("div", { className: "presentation-components-tree-selector-content-wrapper", children: selectedContent?.render({ density: props.density }) })] }));
|
|
25
|
+
}
|
|
26
|
+
exports.TreeSelector = TreeSelector;
|
|
27
|
+
//# sourceMappingURL=TreeSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeSelector.js","sourceRoot":"","sources":["../../../src/components/TreeSelector.tsx"],"names":[],"mappings":";;;;AAAA;;;gGAGgG;AAEhG,+BAA6B;AAC7B,iCAA0C;AAC1C,wDAAwD;AAyBxD;;;;GAIG;AACH,SAAgB,YAAY,CAAC,KAAwB;IACnD,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC3F,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,iBAAiB,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9F,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,KAAK,UAAU,CAAC;IAEhD,MAAM,OAAO,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAC3B,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAA2B,CAAC;IAC7F,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAElB,OAAO,CACL,iCAAK,SAAS,EAAC,+CAA+C,aAC5D,gCAAK,SAAS,EAAC,sDAAsD,YAClE,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CACrB,uBAAC,sBAAM,IACL,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,eAAe,CAAC,EAAE,EACzB,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EACpC,YAAY,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CACnC,uBAAC,wBAAQ,OAAK,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,YAC3F,MAAM,CAAC,KAAK,GACJ,CACZ,GACD,CACH,GACG,EACN,gCAAK,SAAS,EAAC,uDAAuD,YAAE,eAAe,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,GAAO,IAC9H,CACP,CAAC;AACJ,CAAC;AA7BD,oCA6BC","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 \"./TreeSelector.scss\";\nimport { useMemo, useState } from \"react\";\nimport { MenuItem, Select } from \"@itwin/itwinui-react\";\n\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport type { TreeRenderProps } from \"./SelectableTree\";\n\n/**\n * A definition for trees displayed in [[TreeSelector]]\n * @internal\n */\nexport interface TreeContentDefinition {\n id: string;\n label: string;\n render: (props: TreeRenderProps) => React.ReactNode;\n}\n\n/**\n * Props for [[TreeSelector]]\n * @internal\n */\nexport interface TreeSelectorProps {\n defaultSelectedContentId: string;\n trees: TreeContentDefinition[];\n density?: \"enlarged\" | \"default\";\n}\n\n/**\n * A component that accepts a list of trees and renders a select box at the top,\n * allowing to choose which of the provided tree components should be rendered at the bottom.\n * @internal\n */\nexport function TreeSelector(props: TreeSelectorProps) {\n const [selectedContentId, setSelectedContentId] = useState(props.defaultSelectedContentId);\n const selectedContent = props.trees.find((c) => c.id === selectedContentId) ?? props.trees[0];\n const isEnlarged = props.density === \"enlarged\";\n\n const options = useMemo(() => {\n return props.trees.map((c) => ({ label: c.label, value: c.id })) as SelectOption<string>[];\n }, [props.trees]);\n\n return (\n <div className=\"presentation-components-tree-selector-content\">\n <div className=\"presentation-components-tree-selector-content-header\">\n {options.length > 0 && (\n <Select\n onChange={setSelectedContentId}\n options={options}\n value={selectedContent.id}\n size={isEnlarged ? \"large\" : \"small\"}\n itemRenderer={(option, itemProps) => (\n <MenuItem {...option} isSelected={itemProps.isSelected} size={isEnlarged ? \"large\" : \"default\"}>\n {option.label}\n </MenuItem>\n )}\n />\n )}\n </div>\n <div className=\"presentation-components-tree-selector-content-wrapper\">{selectedContent?.render({ density: props.density })}</div>\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
|
|
6
|
+
.presentation-components-tree-selector-content {
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-direction: column;
|
|
9
|
+
flex: 1;
|
|
10
|
+
overflow: hidden;
|
|
11
|
+
|
|
12
|
+
.presentation-components-tree-selector-content-header {
|
|
13
|
+
padding-bottom: var(--iui-size-2xs);
|
|
14
|
+
|
|
15
|
+
.presentation-components-tree-selector-content-selector {
|
|
16
|
+
width: 100%;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.presentation-components-tree-selector-content-wrapper {
|
|
21
|
+
display: flex;
|
|
22
|
+
flex-direction: column;
|
|
23
|
+
flex-grow: 1;
|
|
24
|
+
height: 100%;
|
|
25
|
+
overflow: hidden;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
1
2
|
import "./TreeWidgetUiItemsProvider.scss";
|
|
2
3
|
import { StagePanelLocation, StagePanelSection } from "@itwin/appui-react";
|
|
3
4
|
import type { UiItemsProvider, Widget } from "@itwin/appui-react";
|
|
4
|
-
import type { TreeDefinition } from "./SelectableTree";
|
|
5
|
+
import type { SelectableTreeProps, TreeDefinition } from "./SelectableTree";
|
|
5
6
|
/**
|
|
6
7
|
* Parameters for creating a [[TreeWidgetUiItemsProvider]].
|
|
7
8
|
* @public
|
|
@@ -15,6 +16,8 @@ export interface TreeWidgetOptions {
|
|
|
15
16
|
defaultTreeWidgetPriority?: number;
|
|
16
17
|
/** Trees to show in the widget. Defaults to [[ModelsTreeComponent]] and [[CategoriesTreeComponent]]. */
|
|
17
18
|
trees?: TreeDefinition[];
|
|
19
|
+
/** Modifies the density of the tree widget. `enlarged` widget contains larger content */
|
|
20
|
+
density?: "enlarged" | "default";
|
|
18
21
|
}
|
|
19
22
|
/**
|
|
20
23
|
* Id of the tree widget created by [[TreeWidgetUiItemsProvider]].
|
|
@@ -31,4 +34,9 @@ export declare class TreeWidgetUiItemsProvider implements UiItemsProvider {
|
|
|
31
34
|
constructor(_treeWidgetOptions?: TreeWidgetOptions | undefined);
|
|
32
35
|
provideWidgets(_stageId: string, stageUsage: string, location: StagePanelLocation, section?: StagePanelSection): ReadonlyArray<Widget>;
|
|
33
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Tree widget component which allows selecting which tree to render.
|
|
39
|
+
* @public
|
|
40
|
+
*/
|
|
41
|
+
export declare function TreeWidgetComponent(props: SelectableTreeProps): JSX.Element;
|
|
34
42
|
//# sourceMappingURL=TreeWidgetUiItemsProvider.d.ts.map
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TreeWidgetUiItemsProvider = exports.TreeWidgetId = void 0;
|
|
3
|
+
exports.TreeWidgetComponent = exports.TreeWidgetUiItemsProvider = exports.TreeWidgetId = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
/*---------------------------------------------------------------------------------------------
|
|
6
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
7
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
8
|
-
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
7
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
8
|
+
*--------------------------------------------------------------------------------------------*/
|
|
9
9
|
require("./TreeWidgetUiItemsProvider.scss");
|
|
10
|
-
const react_error_boundary_1 = require("react-error-boundary");
|
|
11
10
|
const appui_react_1 = require("@itwin/appui-react");
|
|
12
11
|
const itwinui_icons_react_1 = require("@itwin/itwinui-icons-react");
|
|
13
|
-
const itwinui_illustrations_react_1 = require("@itwin/itwinui-illustrations-react");
|
|
14
|
-
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
15
12
|
const TreeWidget_1 = require("../TreeWidget");
|
|
16
|
-
const SelectableTree_1 = require("./SelectableTree");
|
|
17
13
|
const CategoriesTreeComponent_1 = require("./trees/category-tree/CategoriesTreeComponent");
|
|
18
14
|
const ModelsTreeComponent_1 = require("./trees/models-tree/ModelsTreeComponent");
|
|
15
|
+
const react_error_boundary_1 = require("react-error-boundary");
|
|
16
|
+
const SelectableTree_1 = require("./SelectableTree");
|
|
19
17
|
const UseTreeTransientState_1 = require("./utils/UseTreeTransientState");
|
|
18
|
+
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
19
|
+
const itwinui_illustrations_react_1 = require("@itwin/itwinui-illustrations-react");
|
|
20
20
|
/**
|
|
21
21
|
* Id of the tree widget created by [[TreeWidgetUiItemsProvider]].
|
|
22
22
|
* @public
|
|
@@ -41,28 +41,35 @@ class TreeWidgetUiItemsProvider {
|
|
|
41
41
|
{
|
|
42
42
|
id: ModelsTreeComponent_1.ModelsTreeComponent.id,
|
|
43
43
|
getLabel: ModelsTreeComponent_1.ModelsTreeComponent.getLabel,
|
|
44
|
-
render: () => (0, jsx_runtime_1.jsx)(ModelsTreeComponent_1.ModelsTreeComponent, {}),
|
|
44
|
+
render: (props) => (0, jsx_runtime_1.jsx)(ModelsTreeComponent_1.ModelsTreeComponent, { density: props.density }),
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
47
|
id: CategoriesTreeComponent_1.CategoriesTreeComponent.id,
|
|
48
48
|
getLabel: CategoriesTreeComponent_1.CategoriesTreeComponent.getLabel,
|
|
49
|
-
render: () => (0, jsx_runtime_1.jsx)(CategoriesTreeComponent_1.CategoriesTreeComponent, {}),
|
|
49
|
+
render: (props) => (0, jsx_runtime_1.jsx)(CategoriesTreeComponent_1.CategoriesTreeComponent, { density: props.density }),
|
|
50
50
|
},
|
|
51
51
|
];
|
|
52
|
-
return [
|
|
52
|
+
return [
|
|
53
|
+
{
|
|
53
54
|
id: exports.TreeWidgetId,
|
|
54
55
|
label: TreeWidget_1.TreeWidget.translate("treeview"),
|
|
55
|
-
content: (0, jsx_runtime_1.jsx)(
|
|
56
|
+
content: (0, jsx_runtime_1.jsx)(TreeWidgetComponent, { trees: trees, density: this._treeWidgetOptions?.density }),
|
|
56
57
|
icon: (0, jsx_runtime_1.jsx)(itwinui_icons_react_1.SvgHierarchyTree, {}),
|
|
57
58
|
priority: this._treeWidgetOptions?.defaultTreeWidgetPriority,
|
|
58
|
-
}
|
|
59
|
+
},
|
|
60
|
+
];
|
|
59
61
|
}
|
|
60
62
|
}
|
|
61
63
|
exports.TreeWidgetUiItemsProvider = TreeWidgetUiItemsProvider;
|
|
62
|
-
|
|
64
|
+
/**
|
|
65
|
+
* Tree widget component which allows selecting which tree to render.
|
|
66
|
+
* @public
|
|
67
|
+
*/
|
|
68
|
+
function TreeWidgetComponent(props) {
|
|
63
69
|
const ref = (0, UseTreeTransientState_1.useTreeTransientState)();
|
|
64
70
|
return ((0, jsx_runtime_1.jsx)("div", { ref: ref, className: "tree-widget", children: (0, jsx_runtime_1.jsx)(react_error_boundary_1.ErrorBoundary, { FallbackComponent: ErrorState, children: (0, jsx_runtime_1.jsx)(SelectableTree_1.SelectableTree, { ...props }) }) }));
|
|
65
71
|
}
|
|
72
|
+
exports.TreeWidgetComponent = TreeWidgetComponent;
|
|
66
73
|
function ErrorState({ resetErrorBoundary }) {
|
|
67
74
|
return ((0, jsx_runtime_1.jsx)(itwinui_react_1.NonIdealState, { svg: (0, jsx_runtime_1.jsx)(itwinui_illustrations_react_1.SvgError, {}), heading: TreeWidget_1.TreeWidget.translate("error"), description: TreeWidget_1.TreeWidget.translate("generic-error-description"), actions: (0, jsx_runtime_1.jsx)(itwinui_react_1.Button, { styleType: "high-visibility", onClick: resetErrorBoundary, children: TreeWidget_1.TreeWidget.translate("retry") }) }));
|
|
68
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeWidgetUiItemsProvider.js","sourceRoot":"","sources":["../../../src/components/TreeWidgetUiItemsProvider.tsx"],"names":[],"mappings":";;;;AAAA
|
|
1
|
+
{"version":3,"file":"TreeWidgetUiItemsProvider.js","sourceRoot":"","sources":["../../../src/components/TreeWidgetUiItemsProvider.tsx"],"names":[],"mappings":";;;;AAAA;;;gGAGgG;AAEhG,4CAA0C;AAC1C,oDAAuF;AACvF,oEAA8D;AAC9D,8CAA2C;AAC3C,2FAAwF;AACxF,iFAA8E;AAK9E,+DAAqD;AACrD,qDAAkD;AAClD,yEAAsE;AACtE,wDAA6D;AAC7D,oFAA8D;AAkB9D;;;GAGG;AACU,QAAA,YAAY,GAAG,yBAAyB,CAAC;AAEtD;;;GAGG;AACH,MAAa,yBAAyB;IAGpC,YAAoB,kBAAsC;QAAtC,uBAAkB,GAAlB,kBAAkB,CAAoB;QAF1C,OAAE,GAAG,2BAA2B,CAAC;IAEY,CAAC;IAEvD,cAAc,CAAC,QAAgB,EAAE,UAAkB,EAAE,QAA4B,EAAE,OAA2B;QACnH,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,EAAE,oBAAoB,IAAI,gCAAkB,CAAC,KAAK,CAAC;QACpG,MAAM,qBAAqB,GAAG,IAAI,CAAC,kBAAkB,EAAE,mBAAmB,IAAI,+BAAiB,CAAC,KAAK,CAAC;QAEtG,IAAI,QAAQ,KAAK,iBAAiB,IAAI,OAAO,KAAK,qBAAqB,IAAI,UAAU,KAAK,wBAAU,CAAC,OAAO,EAAE;YAC5G,OAAO,EAAE,CAAC;SACX;QAED,MAAM,KAAK,GAAqB,IAAI,CAAC,kBAAkB,EAAE,KAAK,IAAI;YAChE;gBACE,EAAE,EAAE,yCAAmB,CAAC,EAAE;gBAC1B,QAAQ,EAAE,yCAAmB,CAAC,QAAQ;gBACtC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAC,yCAAmB,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,GAAI;aACnE;YACD;gBACE,EAAE,EAAE,iDAAuB,CAAC,EAAE;gBAC9B,QAAQ,EAAE,iDAAuB,CAAC,QAAQ;gBAC1C,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAC,iDAAuB,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,GAAI;aACvE;SACF,CAAC;QAEF,OAAO;YACL;gBACE,EAAE,EAAE,oBAAY;gBAChB,KAAK,EAAE,uBAAU,CAAC,SAAS,CAAC,UAAU,CAAC;gBACvC,OAAO,EAAE,uBAAC,mBAAmB,IAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,OAAO,GAAI;gBACzF,IAAI,EAAE,uBAAC,sCAAgB,KAAG;gBAC1B,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,yBAAyB;aAC7D;SACF,CAAC;IACJ,CAAC;CACF;AApCD,8DAoCC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,KAA0B;IAC5D,MAAM,GAAG,GAAG,IAAA,6CAAqB,GAAkB,CAAC;IAEpD,OAAO,CACL,gCAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAC,aAAa,YACpC,uBAAC,oCAAa,IAAC,iBAAiB,EAAE,UAAU,YAC1C,uBAAC,+BAAc,OAAK,KAAK,GAAI,GACf,GACZ,CACP,CAAC;AACJ,CAAC;AAVD,kDAUC;AAED,SAAS,UAAU,CAAC,EAAE,kBAAkB,EAAiB;IACvD,OAAO,CACL,uBAAC,6BAAa,IACZ,GAAG,EAAE,uBAAC,sCAAQ,KAAG,EACjB,OAAO,EAAE,uBAAU,CAAC,SAAS,CAAC,OAAO,CAAC,EACtC,WAAW,EAAE,uBAAU,CAAC,SAAS,CAAC,2BAA2B,CAAC,EAC9D,OAAO,EACL,uBAAC,sBAAM,IAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,kBAAkB,YAC9D,uBAAU,CAAC,SAAS,CAAC,OAAO,CAAC,GACvB,GAEX,CACH,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport \"./TreeWidgetUiItemsProvider.scss\";\nimport { StagePanelLocation, StagePanelSection, StageUsage } from \"@itwin/appui-react\";\nimport { SvgHierarchyTree } from \"@itwin/itwinui-icons-react\";\nimport { TreeWidget } from \"../TreeWidget\";\nimport { CategoriesTreeComponent } from \"./trees/category-tree/CategoriesTreeComponent\";\nimport { ModelsTreeComponent } from \"./trees/models-tree/ModelsTreeComponent\";\n\nimport type { UiItemsProvider, Widget } from \"@itwin/appui-react\";\nimport type { SelectableTreeProps, TreeDefinition } from \"./SelectableTree\";\nimport type { FallbackProps } from \"react-error-boundary\";\nimport { ErrorBoundary } from \"react-error-boundary\";\nimport { SelectableTree } from \"./SelectableTree\";\nimport { useTreeTransientState } from \"./utils/UseTreeTransientState\";\nimport { Button, NonIdealState } from \"@itwin/itwinui-react\";\nimport { SvgError } from \"@itwin/itwinui-illustrations-react\";\n/**\n * Parameters for creating a [[TreeWidgetUiItemsProvider]].\n * @public\n */\nexport interface TreeWidgetOptions {\n /** The stage panel to place the widget in. Defaults to `StagePanelLocation.Right`. */\n defaultPanelLocation?: StagePanelLocation;\n /** The stage panel section to place the widget in. Defaults to `StagePanelSection.Start`. */\n defaultPanelSection?: StagePanelSection;\n /** Widget priority in the stage panel. */\n defaultTreeWidgetPriority?: number;\n /** Trees to show in the widget. Defaults to [[ModelsTreeComponent]] and [[CategoriesTreeComponent]]. */\n trees?: TreeDefinition[];\n /** Modifies the density of the tree widget. `enlarged` widget contains larger content */\n density?: \"enlarged\" | \"default\";\n}\n\n/**\n * Id of the tree widget created by [[TreeWidgetUiItemsProvider]].\n * @public\n */\nexport const TreeWidgetId = \"tree-widget-react:trees\";\n\n/**\n * A [[UiItemsProvider]] implementation that provides a [[SelectableTree]] into a stage panel.\n * @public\n */\nexport class TreeWidgetUiItemsProvider implements UiItemsProvider {\n public readonly id = \"TreeWidgetUiItemsProvider\";\n\n constructor(private _treeWidgetOptions?: TreeWidgetOptions) {}\n\n public provideWidgets(_stageId: string, stageUsage: string, location: StagePanelLocation, section?: StagePanelSection): ReadonlyArray<Widget> {\n const preferredLocation = this._treeWidgetOptions?.defaultPanelLocation ?? StagePanelLocation.Right;\n const preferredPanelSection = this._treeWidgetOptions?.defaultPanelSection ?? StagePanelSection.Start;\n\n if (location !== preferredLocation || section !== preferredPanelSection || stageUsage !== StageUsage.General) {\n return [];\n }\n\n const trees: TreeDefinition[] = this._treeWidgetOptions?.trees ?? [\n {\n id: ModelsTreeComponent.id,\n getLabel: ModelsTreeComponent.getLabel,\n render: (props) => <ModelsTreeComponent density={props.density} />,\n },\n {\n id: CategoriesTreeComponent.id,\n getLabel: CategoriesTreeComponent.getLabel,\n render: (props) => <CategoriesTreeComponent density={props.density} />,\n },\n ];\n\n return [\n {\n id: TreeWidgetId,\n label: TreeWidget.translate(\"treeview\"),\n content: <TreeWidgetComponent trees={trees} density={this._treeWidgetOptions?.density} />,\n icon: <SvgHierarchyTree />,\n priority: this._treeWidgetOptions?.defaultTreeWidgetPriority,\n },\n ];\n }\n}\n\n/**\n * Tree widget component which allows selecting which tree to render.\n * @public\n */\nexport function TreeWidgetComponent(props: SelectableTreeProps) {\n const ref = useTreeTransientState<HTMLDivElement>();\n\n return (\n <div ref={ref} className=\"tree-widget\">\n <ErrorBoundary FallbackComponent={ErrorState}>\n <SelectableTree {...props} />\n </ErrorBoundary>\n </div>\n );\n}\n\nfunction ErrorState({ resetErrorBoundary }: FallbackProps) {\n return (\n <NonIdealState\n svg={<SvgError />}\n heading={TreeWidget.translate(\"error\")}\n description={TreeWidget.translate(\"generic-error-description\")}\n actions={\n <Button styleType={\"high-visibility\"} onClick={resetErrorBoundary}>\n {TreeWidget.translate(\"retry\")}\n </Button>\n }\n />\n );\n}"]}
|