@itwin/tree-widget-react 0.1.1
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/LICENSE.md +9 -0
- package/README.md +32 -0
- package/lib/cjs/TreeWidget.d.ts +27 -0
- package/lib/cjs/TreeWidget.js +57 -0
- package/lib/cjs/TreeWidget.js.map +1 -0
- package/lib/cjs/components/IconButton.d.ts +14 -0
- package/lib/cjs/components/IconButton.js +42 -0
- package/lib/cjs/components/IconButton.js.map +1 -0
- package/lib/cjs/components/IconButton.scss +73 -0
- package/lib/cjs/components/TreeFilteringState.d.ts +16 -0
- package/lib/cjs/components/TreeFilteringState.js +67 -0
- package/lib/cjs/components/TreeFilteringState.js.map +1 -0
- package/lib/cjs/components/TreeWidgetComponent.d.ts +8 -0
- package/lib/cjs/components/TreeWidgetComponent.js +41 -0
- package/lib/cjs/components/TreeWidgetComponent.js.map +1 -0
- package/lib/cjs/components/TreeWidgetComponent.scss +64 -0
- package/lib/cjs/components/TreeWidgetControl.d.ts +25 -0
- package/lib/cjs/components/TreeWidgetControl.js +64 -0
- package/lib/cjs/components/TreeWidgetControl.js.map +1 -0
- package/lib/cjs/components/TreeWidgetUiItemsProvider.d.ts +19 -0
- package/lib/cjs/components/TreeWidgetUiItemsProvider.js +81 -0
- package/lib/cjs/components/TreeWidgetUiItemsProvider.js.map +1 -0
- package/lib/cjs/components/header/TreeHeader.d.ts +14 -0
- package/lib/cjs/components/header/TreeHeader.js +43 -0
- package/lib/cjs/components/header/TreeHeader.js.map +1 -0
- package/lib/cjs/components/header/TreeHeader.scss +19 -0
- package/lib/cjs/components/rulesets/ClassificationSystems.json +122 -0
- package/lib/cjs/components/search-bar/Popup.d.ts +50 -0
- package/lib/cjs/components/search-bar/Popup.js +246 -0
- package/lib/cjs/components/search-bar/Popup.js.map +1 -0
- package/lib/cjs/components/search-bar/Popup.scss +316 -0
- package/lib/cjs/components/search-bar/SearchBar.d.ts +53 -0
- package/lib/cjs/components/search-bar/SearchBar.js +97 -0
- package/lib/cjs/components/search-bar/SearchBar.js.map +1 -0
- package/lib/cjs/components/search-bar/SearchBar.scss +110 -0
- package/lib/cjs/components/search-bar/SearchBox.d.ts +76 -0
- package/lib/cjs/components/search-bar/SearchBox.js +184 -0
- package/lib/cjs/components/search-bar/SearchBox.js.map +1 -0
- package/lib/cjs/components/search-bar/SearchBox.scss +91 -0
- package/lib/cjs/components/trees/CategoriesTree.d.ts +9 -0
- package/lib/cjs/components/trees/CategoriesTree.js +76 -0
- package/lib/cjs/components/trees/CategoriesTree.js.map +1 -0
- package/lib/cjs/components/trees/CategoriesTree.scss +13 -0
- package/lib/cjs/components/trees/ClassificationsTree.d.ts +6 -0
- package/lib/cjs/components/trees/ClassificationsTree.js +43 -0
- package/lib/cjs/components/trees/ClassificationsTree.js.map +1 -0
- package/lib/cjs/components/trees/ModelsTree.d.ts +10 -0
- package/lib/cjs/components/trees/ModelsTree.js +135 -0
- package/lib/cjs/components/trees/ModelsTree.js.map +1 -0
- package/lib/cjs/components/trees/ModelsTree.scss +14 -0
- package/lib/cjs/components/trees/SpatialTree.d.ts +3 -0
- package/lib/cjs/components/trees/SpatialTree.js +41 -0
- package/lib/cjs/components/trees/SpatialTree.js.map +1 -0
- package/lib/cjs/components/trees/TreeWithRuleset.d.ts +35 -0
- package/lib/cjs/components/trees/TreeWithRuleset.js +108 -0
- package/lib/cjs/components/trees/TreeWithRuleset.js.map +1 -0
- package/lib/cjs/components/trees/TreeWithRulesetTree.scss +17 -0
- package/lib/cjs/components/trees/index.d.ts +6 -0
- package/lib/cjs/components/trees/index.js +22 -0
- package/lib/cjs/components/trees/index.js.map +1 -0
- package/lib/cjs/tree-widget-react.d.ts +7 -0
- package/lib/cjs/tree-widget-react.js +23 -0
- package/lib/cjs/tree-widget-react.js.map +1 -0
- package/lib/esm/TreeWidget.d.ts +27 -0
- package/lib/esm/TreeWidget.js +53 -0
- package/lib/esm/TreeWidget.js.map +1 -0
- package/lib/esm/components/IconButton.d.ts +14 -0
- package/lib/esm/components/IconButton.js +16 -0
- package/lib/esm/components/IconButton.js.map +1 -0
- package/lib/esm/components/IconButton.scss +73 -0
- package/lib/esm/components/TreeFilteringState.d.ts +16 -0
- package/lib/esm/components/TreeFilteringState.js +44 -0
- package/lib/esm/components/TreeFilteringState.js.map +1 -0
- package/lib/esm/components/TreeWidgetComponent.d.ts +8 -0
- package/lib/esm/components/TreeWidgetComponent.js +18 -0
- package/lib/esm/components/TreeWidgetComponent.js.map +1 -0
- package/lib/esm/components/TreeWidgetComponent.scss +64 -0
- package/lib/esm/components/TreeWidgetControl.d.ts +25 -0
- package/lib/esm/components/TreeWidgetControl.js +57 -0
- package/lib/esm/components/TreeWidgetControl.js.map +1 -0
- package/lib/esm/components/TreeWidgetUiItemsProvider.d.ts +19 -0
- package/lib/esm/components/TreeWidgetUiItemsProvider.js +74 -0
- package/lib/esm/components/TreeWidgetUiItemsProvider.js.map +1 -0
- package/lib/esm/components/header/TreeHeader.d.ts +14 -0
- package/lib/esm/components/header/TreeHeader.js +20 -0
- package/lib/esm/components/header/TreeHeader.js.map +1 -0
- package/lib/esm/components/header/TreeHeader.scss +19 -0
- package/lib/esm/components/rulesets/ClassificationSystems.json +122 -0
- package/lib/esm/components/search-bar/Popup.d.ts +50 -0
- package/lib/esm/components/search-bar/Popup.js +220 -0
- package/lib/esm/components/search-bar/Popup.js.map +1 -0
- package/lib/esm/components/search-bar/Popup.scss +316 -0
- package/lib/esm/components/search-bar/SearchBar.d.ts +53 -0
- package/lib/esm/components/search-bar/SearchBar.js +71 -0
- package/lib/esm/components/search-bar/SearchBar.js.map +1 -0
- package/lib/esm/components/search-bar/SearchBar.scss +110 -0
- package/lib/esm/components/search-bar/SearchBox.d.ts +76 -0
- package/lib/esm/components/search-bar/SearchBox.js +158 -0
- package/lib/esm/components/search-bar/SearchBox.js.map +1 -0
- package/lib/esm/components/search-bar/SearchBox.scss +91 -0
- package/lib/esm/components/trees/CategoriesTree.d.ts +9 -0
- package/lib/esm/components/trees/CategoriesTree.js +53 -0
- package/lib/esm/components/trees/CategoriesTree.js.map +1 -0
- package/lib/esm/components/trees/CategoriesTree.scss +13 -0
- package/lib/esm/components/trees/ClassificationsTree.d.ts +6 -0
- package/lib/esm/components/trees/ClassificationsTree.js +17 -0
- package/lib/esm/components/trees/ClassificationsTree.js.map +1 -0
- package/lib/esm/components/trees/ModelsTree.d.ts +10 -0
- package/lib/esm/components/trees/ModelsTree.js +112 -0
- package/lib/esm/components/trees/ModelsTree.js.map +1 -0
- package/lib/esm/components/trees/ModelsTree.scss +14 -0
- package/lib/esm/components/trees/SpatialTree.d.ts +3 -0
- package/lib/esm/components/trees/SpatialTree.js +18 -0
- package/lib/esm/components/trees/SpatialTree.js.map +1 -0
- package/lib/esm/components/trees/TreeWithRuleset.d.ts +35 -0
- package/lib/esm/components/trees/TreeWithRuleset.js +83 -0
- package/lib/esm/components/trees/TreeWithRuleset.js.map +1 -0
- package/lib/esm/components/trees/TreeWithRulesetTree.scss +17 -0
- package/lib/esm/components/trees/index.d.ts +6 -0
- package/lib/esm/components/trees/index.js +10 -0
- package/lib/esm/components/trees/index.js.map +1 -0
- package/lib/esm/tree-widget-react.d.ts +7 -0
- package/lib/esm/tree-widget-react.js +11 -0
- package/lib/esm/tree-widget-react.js.map +1 -0
- package/lib/public/locales/en/TreeWidget.json +16 -0
- package/package.json +97 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.TreeWidgetUiItemsProvider = 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_abstract_1 = require("@itwin/appui-abstract");
|
|
12
|
+
const appui_react_1 = require("@itwin/appui-react");
|
|
13
|
+
const react_1 = __importDefault(require("react"));
|
|
14
|
+
const TreeWidgetComponent_1 = require("./TreeWidgetComponent");
|
|
15
|
+
const trees_1 = require("./trees");
|
|
16
|
+
const TreeWidget_1 = require("../TreeWidget");
|
|
17
|
+
class TreeWidgetUiItemsProvider {
|
|
18
|
+
constructor(props) {
|
|
19
|
+
var _a, _b, _c, _d, _e, _f;
|
|
20
|
+
this.id = "TreeWidgetUiitemsProvider";
|
|
21
|
+
this._imodel = props === null || props === void 0 ? void 0 : props.iModelConnection;
|
|
22
|
+
this._activeView = props === null || props === void 0 ? void 0 : props.activeView;
|
|
23
|
+
this._enableElementsClassGrouping = props === null || props === void 0 ? void 0 : props.enableElementsClassGrouping;
|
|
24
|
+
this._allViewports = props === null || props === void 0 ? void 0 : props.allViewports;
|
|
25
|
+
this._additionalTrees = props === null || props === void 0 ? void 0 : props.additionalTrees;
|
|
26
|
+
this._modelsTreeProps = (_a = props === null || props === void 0 ? void 0 : props.additionalProps) === null || _a === void 0 ? void 0 : _a.modelsTree;
|
|
27
|
+
this._categoriesTreeProps = (_b = props === null || props === void 0 ? void 0 : props.additionalProps) === null || _b === void 0 ? void 0 : _b.categoriesTree;
|
|
28
|
+
this._spatialTreeProps = (_c = props === null || props === void 0 ? void 0 : props.additionalProps) === null || _c === void 0 ? void 0 : _c.spatialTree;
|
|
29
|
+
this._modelsTreeReplacement = (_d = props === null || props === void 0 ? void 0 : props.treeReplacements) === null || _d === void 0 ? void 0 : _d.modelsTree;
|
|
30
|
+
this._categoriesTreeReplacement = (_e = props === null || props === void 0 ? void 0 : props.treeReplacements) === null || _e === void 0 ? void 0 : _e.categoriesTree;
|
|
31
|
+
this._spatialTreeReplacement = (_f = props === null || props === void 0 ? void 0 : props.treeReplacements) === null || _f === void 0 ? void 0 : _f.spatialTree;
|
|
32
|
+
}
|
|
33
|
+
provideWidgets(_stageId, stageUsage, location, _section) {
|
|
34
|
+
var _a, _b, _c;
|
|
35
|
+
const widgets = [];
|
|
36
|
+
const imodel = appui_react_1.UiFramework.getIModelConnection();
|
|
37
|
+
if (stageUsage === appui_abstract_1.StageUsage.General &&
|
|
38
|
+
location === appui_abstract_1.StagePanelLocation.Right &&
|
|
39
|
+
imodel !== undefined) {
|
|
40
|
+
const modelsTreeComponent = (react_1.default.createElement(trees_1.ModelsTreeComponent, { iModel: (_a = this._imodel) !== null && _a !== void 0 ? _a : imodel, allViewports: this._allViewports, activeView: this._activeView, enableElementsClassGrouping: this._enableElementsClassGrouping, ...this._modelsTreeProps }));
|
|
41
|
+
const categoriesTreeComponent = (react_1.default.createElement(trees_1.CategoriesTreeComponent, { iModel: (_b = this._imodel) !== null && _b !== void 0 ? _b : imodel, allViewports: this._allViewports, activeView: this._activeView, ...this._categoriesTreeProps }));
|
|
42
|
+
const spatialContainmentComponent = (react_1.default.createElement(trees_1.SpatialTreeComponent, { iModel: (_c = this._imodel) !== null && _c !== void 0 ? _c : imodel, enableElementsClassGrouping: this._enableElementsClassGrouping
|
|
43
|
+
? appui_react_1.ClassGroupingOption.Yes
|
|
44
|
+
: appui_react_1.ClassGroupingOption.No, ...this._spatialTreeProps }));
|
|
45
|
+
const trees = [
|
|
46
|
+
{
|
|
47
|
+
label: TreeWidget_1.TreeWidget.translate("modeltree"),
|
|
48
|
+
id: "model-tree",
|
|
49
|
+
render: this._modelsTreeReplacement
|
|
50
|
+
? this._modelsTreeReplacement
|
|
51
|
+
: () => modelsTreeComponent,
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
label: TreeWidget_1.TreeWidget.translate("categories"),
|
|
55
|
+
id: "categories-tree",
|
|
56
|
+
render: this._categoriesTreeReplacement
|
|
57
|
+
? this._categoriesTreeReplacement
|
|
58
|
+
: () => categoriesTreeComponent,
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
label: TreeWidget_1.TreeWidget.translate("containment"),
|
|
62
|
+
id: "spatial-containment-tree",
|
|
63
|
+
render: this._spatialTreeReplacement
|
|
64
|
+
? this._spatialTreeReplacement
|
|
65
|
+
: () => spatialContainmentComponent,
|
|
66
|
+
},
|
|
67
|
+
];
|
|
68
|
+
if (this._additionalTrees) {
|
|
69
|
+
trees.push(...this._additionalTrees);
|
|
70
|
+
}
|
|
71
|
+
widgets.push({
|
|
72
|
+
id: "tree",
|
|
73
|
+
label: TreeWidget_1.TreeWidget.translate("treeview"),
|
|
74
|
+
getWidgetContent: () => react_1.default.createElement(TreeWidgetComponent_1.TreeWidgetComponent, { trees: trees }),
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
return widgets;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.TreeWidgetUiItemsProvider = TreeWidgetUiItemsProvider;
|
|
81
|
+
//# sourceMappingURL=TreeWidgetUiItemsProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeWidgetUiItemsProvider.js","sourceRoot":"","sources":["../../../src/components/TreeWidgetUiItemsProvider.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*--------------------------------------------------------------------------------------------*/\nimport {\n AbstractWidgetProps,\n StagePanelLocation,\n StagePanelSection,\n StageUsage,\n UiItemsProvider,\n} from \"@itwin/appui-abstract\";\nimport { ClassGroupingOption, UiFramework } from \"@itwin/appui-react\";\nimport React from \"react\";\nimport { TreeWidgetComponent } from \"./TreeWidgetComponent\";\nimport {\n ModelsTreeComponent,\n CategoriesTreeComponent,\n SpatialTreeComponent,\n} from \"./trees\";\nimport { IModelConnection, Viewport } from \"@itwin/core-frontend\";\nimport { SelectableContentDefinition } from \"@itwin/components-react\";\nimport { TreeWidget } from \"../TreeWidget\";\nimport { TreeWidgetControlOptions } from \"./TreeWidgetControl\";\n\nexport class TreeWidgetUiItemsProvider implements UiItemsProvider {\n public readonly id = \"TreeWidgetUiitemsProvider\";\n\n private _imodel?: IModelConnection;\n private _activeView?: Viewport;\n private _enableElementsClassGrouping?: boolean;\n private _allViewports?: boolean;\n private _additionalTrees?: SelectableContentDefinition[];\n private _modelsTreeProps?: {};\n private _categoriesTreeProps?: {};\n private _spatialTreeProps?: {};\n private _modelsTreeReplacement?: () => React.ReactNode;\n private _categoriesTreeReplacement?: () => React.ReactNode;\n private _spatialTreeReplacement?: () => React.ReactNode;\n\n constructor(props?: Partial<TreeWidgetControlOptions>) {\n this._imodel = props?.iModelConnection;\n this._activeView = props?.activeView;\n this._enableElementsClassGrouping = props?.enableElementsClassGrouping;\n this._allViewports = props?.allViewports;\n this._additionalTrees = props?.additionalTrees;\n this._modelsTreeProps = props?.additionalProps?.modelsTree;\n this._categoriesTreeProps = props?.additionalProps?.categoriesTree;\n this._spatialTreeProps = props?.additionalProps?.spatialTree;\n this._modelsTreeReplacement = props?.treeReplacements?.modelsTree;\n this._categoriesTreeReplacement = props?.treeReplacements?.categoriesTree;\n this._spatialTreeReplacement = props?.treeReplacements?.spatialTree;\n }\n\n public provideWidgets(\n _stageId: string,\n stageUsage: string,\n location: StagePanelLocation,\n _section: StagePanelSection | undefined\n ): ReadonlyArray<AbstractWidgetProps> {\n const widgets: AbstractWidgetProps[] = [];\n const imodel = UiFramework.getIModelConnection();\n if (\n stageUsage === StageUsage.General &&\n location === StagePanelLocation.Right &&\n imodel !== undefined\n ) {\n const modelsTreeComponent = (\n <ModelsTreeComponent\n iModel={this._imodel ?? imodel}\n allViewports={this._allViewports}\n activeView={this._activeView}\n enableElementsClassGrouping={this._enableElementsClassGrouping}\n {...this._modelsTreeProps}\n />\n );\n\n const categoriesTreeComponent = (\n <CategoriesTreeComponent\n iModel={this._imodel ?? imodel}\n allViewports={this._allViewports}\n activeView={this._activeView}\n {...this._categoriesTreeProps}\n />\n );\n\n const spatialContainmentComponent = (\n <SpatialTreeComponent\n iModel={this._imodel ?? imodel}\n enableElementsClassGrouping={\n this._enableElementsClassGrouping\n ? ClassGroupingOption.Yes\n : ClassGroupingOption.No\n }\n {...this._spatialTreeProps}\n />\n );\n\n const trees: SelectableContentDefinition[] = [\n {\n label: TreeWidget.translate(\"modeltree\"),\n id: \"model-tree\",\n render: this._modelsTreeReplacement\n ? this._modelsTreeReplacement\n : () => modelsTreeComponent,\n },\n {\n label: TreeWidget.translate(\"categories\"),\n id: \"categories-tree\",\n render: this._categoriesTreeReplacement\n ? this._categoriesTreeReplacement\n : () => categoriesTreeComponent,\n },\n {\n label: TreeWidget.translate(\"containment\"),\n id: \"spatial-containment-tree\",\n render: this._spatialTreeReplacement\n ? this._spatialTreeReplacement\n : () => spatialContainmentComponent,\n },\n ];\n\n if (this._additionalTrees) {\n trees.push(...this._additionalTrees);\n }\n\n widgets.push({\n id: \"tree\",\n label: TreeWidget.translate(\"treeview\"),\n getWidgetContent: () => <TreeWidgetComponent trees={trees} />,\n });\n }\n\n return widgets;\n }\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SearchOptions } from "../TreeFilteringState";
|
|
2
|
+
import "./TreeHeader.scss";
|
|
3
|
+
export interface TreeHeaderComponentProps {
|
|
4
|
+
showAll?: () => void;
|
|
5
|
+
hideAll?: () => void;
|
|
6
|
+
invert?: () => void;
|
|
7
|
+
toggle2D?: () => void;
|
|
8
|
+
toggle2DIcon?: string;
|
|
9
|
+
toggle3D?: () => void;
|
|
10
|
+
toggle3DIcon?: string;
|
|
11
|
+
searchOptions: SearchOptions;
|
|
12
|
+
}
|
|
13
|
+
export declare function TreeHeaderComponent({ searchOptions, showAll, hideAll, invert, toggle2D, toggle2DIcon, toggle3D, toggle3DIcon, }: TreeHeaderComponentProps): JSX.Element;
|
|
14
|
+
//# sourceMappingURL=TreeHeader.d.ts.map
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.TreeHeaderComponent = void 0;
|
|
23
|
+
/*---------------------------------------------------------------------------------------------
|
|
24
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
25
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
26
|
+
*--------------------------------------------------------------------------------------------*/
|
|
27
|
+
const React = __importStar(require("react"));
|
|
28
|
+
const IconButton_1 = require("../IconButton");
|
|
29
|
+
const SearchBar_1 = require("../search-bar/SearchBar");
|
|
30
|
+
const TreeWidget_1 = require("../../TreeWidget");
|
|
31
|
+
require("./TreeHeader.scss");
|
|
32
|
+
function TreeHeaderComponent({ searchOptions, showAll, hideAll, invert, toggle2D, toggle2DIcon, toggle3D, toggle3DIcon, }) {
|
|
33
|
+
var _a;
|
|
34
|
+
return (React.createElement(SearchBar_1.SearchBar, { value: "", className: "tree-widget-header-tree-search-bar", 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 },
|
|
35
|
+
React.createElement("div", { className: "tree-widget-search-bar-button-container" },
|
|
36
|
+
showAll && (React.createElement(IconButton_1.IconButton, { className: "tree-widget-header-tree-toolbar-icon", key: "show-all-btn", icon: "icon-visibility", title: TreeWidget_1.TreeWidget.translate("showAll"), onClick: showAll })),
|
|
37
|
+
hideAll && (React.createElement(IconButton_1.IconButton, { className: "tree-widget-header-tree-toolbar-icon", key: "hide-all-btn", icon: "icon-visibility-hide-2", title: TreeWidget_1.TreeWidget.translate("hideAll"), onClick: hideAll })),
|
|
38
|
+
invert && (React.createElement(IconButton_1.IconButton, { key: "invert-all-btn", className: "tree-widget-header-tree-toolbar-icon", title: TreeWidget_1.TreeWidget.translate("invert"), icon: "icon-visibility-invert", onClick: invert })),
|
|
39
|
+
toggle2D && toggle2DIcon && (React.createElement(IconButton_1.IconButton, { className: "tree-widget-header-tree-toolbar-icon", key: "view-2d-btn", icon: toggle2DIcon, title: TreeWidget_1.TreeWidget.translate("toggle2DViews"), onClick: toggle2D, label: TreeWidget_1.TreeWidget.translate("label2D") })),
|
|
40
|
+
toggle3D && toggle3DIcon && (React.createElement(IconButton_1.IconButton, { className: "tree-widget-header-tree-toolbar-icon", key: "view-3d-btn", icon: toggle3DIcon, title: TreeWidget_1.TreeWidget.translate("toggle3DViews"), onClick: toggle3D, label: TreeWidget_1.TreeWidget.translate("label3D") })))));
|
|
41
|
+
}
|
|
42
|
+
exports.TreeHeaderComponent = TreeHeaderComponent;
|
|
43
|
+
//# sourceMappingURL=TreeHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeHeader.js","sourceRoot":"","sources":["../../../../src/components/header/TreeHeader.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,6CAA+B;AAC/B,8CAA2C;AAC3C,uDAAoD;AAEpD,iDAA8C;AAC9C,6BAA2B;AAa3B,SAAgB,mBAAmB,CAAC,EAClC,aAAa,EACb,OAAO,EACP,OAAO,EACP,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,YAAY,GACa;;IACzB,OAAO,CACL,oBAAC,qBAAS,IACR,KAAK,EAAC,EAAE,EACR,SAAS,EAAC,oCAAoC,EAC9C,iBAAiB,EAAE,GAAG,EACtB,WAAW,EAAE,uBAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,EAC3C,KAAK,EAAE,uBAAU,CAAC,SAAS,CAAC,oBAAoB,CAAC,EACjD,mBAAmB,EAAE,aAAa,CAAC,WAAW,EAC9C,cAAc,EAAE,aAAa,CAAC,cAAc,EAC5C,aAAa,EAAE,aAAa,CAAC,cAAc,EAC3C,aAAa,EAAE,aAAa,CAAC,aAAa,EAC1C,iBAAiB,EAAE,aAAa,CAAC,uBAAuB,EACxD,WAAW,EAAE,MAAA,aAAa,CAAC,kBAAkB,mCAAI,CAAC;QAElD,6BAAK,SAAS,EAAC,yCAAyC;YACrD,OAAO,IAAI,CACV,oBAAC,uBAAU,IACT,SAAS,EAAE,sCAAsC,EACjD,GAAG,EAAC,cAAc,EAClB,IAAI,EAAC,iBAAiB,EACtB,KAAK,EAAE,uBAAU,CAAC,SAAS,CAAC,SAAS,CAAC,EACtC,OAAO,EAAE,OAAO,GAChB,CACH;YACA,OAAO,IAAI,CACV,oBAAC,uBAAU,IACT,SAAS,EAAE,sCAAsC,EACjD,GAAG,EAAC,cAAc,EAClB,IAAI,EAAC,wBAAwB,EAC7B,KAAK,EAAE,uBAAU,CAAC,SAAS,CAAC,SAAS,CAAC,EACtC,OAAO,EAAE,OAAO,GAChB,CACH;YACA,MAAM,IAAI,CACT,oBAAC,uBAAU,IACT,GAAG,EAAC,gBAAgB,EACpB,SAAS,EAAE,sCAAsC,EACjD,KAAK,EAAE,uBAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,EACrC,IAAI,EAAC,wBAAwB,EAC7B,OAAO,EAAE,MAAM,GACf,CACH;YACA,QAAQ,IAAI,YAAY,IAAI,CAC3B,oBAAC,uBAAU,IACT,SAAS,EAAE,sCAAsC,EACjD,GAAG,EAAC,aAAa,EACjB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,uBAAU,CAAC,SAAS,CAAC,eAAe,CAAC,EAC5C,OAAO,EAAE,QAAQ,EACjB,KAAK,EAAE,uBAAU,CAAC,SAAS,CAAC,SAAS,CAAC,GACtC,CACH;YACA,QAAQ,IAAI,YAAY,IAAI,CAC3B,oBAAC,uBAAU,IACT,SAAS,EAAE,sCAAsC,EACjD,GAAG,EAAC,aAAa,EACjB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,uBAAU,CAAC,SAAS,CAAC,eAAe,CAAC,EAC5C,OAAO,EAAE,QAAQ,EACjB,KAAK,EAAE,uBAAU,CAAC,SAAS,CAAC,SAAS,CAAC,GACtC,CACH,CACG,CACI,CACb,CAAC;AACJ,CAAC;AA3ED,kDA2EC","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 * as React from \"react\";\nimport { IconButton } from \"../IconButton\";\nimport { SearchBar } from \"../search-bar/SearchBar\";\nimport { SearchOptions } from \"../TreeFilteringState\";\nimport { TreeWidget } from \"../../TreeWidget\";\nimport \"./TreeHeader.scss\";\n\nexport interface TreeHeaderComponentProps {\n showAll?: () => void;\n hideAll?: () => void;\n invert?: () => void;\n toggle2D?: () => void;\n toggle2DIcon?: string;\n toggle3D?: () => void;\n toggle3DIcon?: string;\n searchOptions: SearchOptions;\n}\n\nexport function TreeHeaderComponent({\n searchOptions,\n showAll,\n hideAll,\n invert,\n toggle2D,\n toggle2DIcon,\n toggle3D,\n toggle3DIcon,\n}: TreeHeaderComponentProps) {\n return (\n <SearchBar\n value=\"\"\n className=\"tree-widget-header-tree-search-bar\"\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 <div className=\"tree-widget-search-bar-button-container\">\n {showAll && (\n <IconButton\n className={\"tree-widget-header-tree-toolbar-icon\"}\n key=\"show-all-btn\"\n icon=\"icon-visibility\"\n title={TreeWidget.translate(\"showAll\")}\n onClick={showAll}\n />\n )}\n {hideAll && (\n <IconButton\n className={\"tree-widget-header-tree-toolbar-icon\"}\n key=\"hide-all-btn\"\n icon=\"icon-visibility-hide-2\"\n title={TreeWidget.translate(\"hideAll\")}\n onClick={hideAll}\n />\n )}\n {invert && (\n <IconButton\n key=\"invert-all-btn\"\n className={\"tree-widget-header-tree-toolbar-icon\"}\n title={TreeWidget.translate(\"invert\")}\n icon=\"icon-visibility-invert\"\n onClick={invert}\n />\n )}\n {toggle2D && toggle2DIcon && (\n <IconButton\n className={\"tree-widget-header-tree-toolbar-icon\"}\n key=\"view-2d-btn\"\n icon={toggle2DIcon}\n title={TreeWidget.translate(\"toggle2DViews\")}\n onClick={toggle2D}\n label={TreeWidget.translate(\"label2D\")}\n />\n )}\n {toggle3D && toggle3DIcon && (\n <IconButton\n className={\"tree-widget-header-tree-toolbar-icon\"}\n key=\"view-3d-btn\"\n icon={toggle3DIcon}\n title={TreeWidget.translate(\"toggle3DViews\")}\n onClick={toggle3D}\n label={TreeWidget.translate(\"label3D\")}\n />\n )}\n </div>\n </SearchBar>\n );\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
@import "~@itwin/core-react/lib/esm/core-react/index";
|
|
6
|
+
|
|
7
|
+
.tree-widget-header-tree-search-bar {
|
|
8
|
+
margin-bottom: $uicore-s;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.tree-widget-header-tree-toolbar-icon {
|
|
12
|
+
color: $buic-icon-color;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.tree-widget-search-bar-button-container {
|
|
16
|
+
display: flex;
|
|
17
|
+
align-items: center;
|
|
18
|
+
width: 100%;
|
|
19
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "tree-widget-react/ClassificationSystems",
|
|
3
|
+
"rules": [
|
|
4
|
+
{
|
|
5
|
+
"ruleType": "RootNodes",
|
|
6
|
+
"specifications": [
|
|
7
|
+
{
|
|
8
|
+
"specType": "InstanceNodesOfSpecificClasses",
|
|
9
|
+
"classes": [
|
|
10
|
+
{
|
|
11
|
+
"schemaName": "ClassificationSystems",
|
|
12
|
+
"classNames": [
|
|
13
|
+
"ClassificationSystem"
|
|
14
|
+
]
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"arePolymorphic": false,
|
|
18
|
+
"groupByClass": false,
|
|
19
|
+
"groupByLabel": false
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"ruleType": "ChildNodes",
|
|
25
|
+
"condition": "ParentNode.IsOfClass(\"ClassificationSystem\", \"ClassificationSystems\")",
|
|
26
|
+
"specifications": [
|
|
27
|
+
{
|
|
28
|
+
"specType": "RelatedInstanceNodes",
|
|
29
|
+
"relationships": {
|
|
30
|
+
"schemaName": "ClassificationSystems",
|
|
31
|
+
"classNames": [
|
|
32
|
+
"ClassificationSystemOwnsClassificationTable"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
"relatedClasses": {
|
|
36
|
+
"schemaName": "ClassificationSystems",
|
|
37
|
+
"classNames": [
|
|
38
|
+
"ClassificationTable"
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
"requiredDirection": "Forward",
|
|
42
|
+
"groupByClass": false,
|
|
43
|
+
"groupByLabel": false,
|
|
44
|
+
"doNotSort": true
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"ruleType": "ChildNodes",
|
|
50
|
+
"condition": "ParentNode.IsOfClass(\"ClassificationTable\", \"ClassificationSystems\")",
|
|
51
|
+
"specifications": [
|
|
52
|
+
{
|
|
53
|
+
"specType": "RelatedInstanceNodes",
|
|
54
|
+
"relationships": {
|
|
55
|
+
"schemaName": "BisCore",
|
|
56
|
+
"classNames": [
|
|
57
|
+
"ModelModelsElement"
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"relatedClasses": {
|
|
61
|
+
"schemaName": "BisCore",
|
|
62
|
+
"classNames": [
|
|
63
|
+
"Model"
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
"requiredDirection": "Backward",
|
|
67
|
+
"groupByClass": false,
|
|
68
|
+
"groupByLabel": false,
|
|
69
|
+
"hideNodesInHierarchy": true
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"ruleType": "ChildNodes",
|
|
75
|
+
"condition": "ParentNode.IsOfClass(\"Model\", \"BisCore\")",
|
|
76
|
+
"specifications": [
|
|
77
|
+
{
|
|
78
|
+
"specType": "RelatedInstanceNodes",
|
|
79
|
+
"relationships": {
|
|
80
|
+
"schemaName": "BisCore",
|
|
81
|
+
"classNames": [
|
|
82
|
+
"ModelContainsElements"
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
"relatedClasses": {
|
|
86
|
+
"schemaName": "ClassificationSystems",
|
|
87
|
+
"classNames": [
|
|
88
|
+
"Classification"
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
"requiredDirection": "Forward",
|
|
92
|
+
"groupByClass": false,
|
|
93
|
+
"groupByLabel": false
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"ruleType": "ChildNodes",
|
|
99
|
+
"condition": "ParentNode.IsOfClass(\"Classification\", \"ClassificationSystems\")",
|
|
100
|
+
"specifications": [
|
|
101
|
+
{
|
|
102
|
+
"specType": "RelatedInstanceNodes",
|
|
103
|
+
"relationships": {
|
|
104
|
+
"schemaName": "ClassificationSystems",
|
|
105
|
+
"classNames": [
|
|
106
|
+
"ElementHasClassifications"
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
"relatedClasses": {
|
|
110
|
+
"schemaName": "BisCore",
|
|
111
|
+
"classNames": [
|
|
112
|
+
"Element"
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
"requiredDirection": "Backward",
|
|
116
|
+
"groupByClass": false,
|
|
117
|
+
"groupByLabel": false
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { CommonProps } from "@itwin/core-react";
|
|
3
|
+
import { RelativePosition } from "@itwin/appui-abstract";
|
|
4
|
+
import "./Popup.scss";
|
|
5
|
+
/** Properties for the [[Popup]] component */
|
|
6
|
+
export interface PopupProps extends CommonProps {
|
|
7
|
+
/** show or hide the box shadow */
|
|
8
|
+
showShadow: boolean;
|
|
9
|
+
/** show or hide the arrow */
|
|
10
|
+
showArrow: boolean;
|
|
11
|
+
/** indicate if the popup is shown or not */
|
|
12
|
+
isShown: boolean;
|
|
13
|
+
/** Direction (relative to the target) to which the popup is expanded */
|
|
14
|
+
position: RelativePosition;
|
|
15
|
+
/** Fixed position in the viewport */
|
|
16
|
+
fixedPosition?: {
|
|
17
|
+
top: number;
|
|
18
|
+
left: number;
|
|
19
|
+
};
|
|
20
|
+
/** target element */
|
|
21
|
+
context: HTMLElement | null;
|
|
22
|
+
/** Function called when the popup is opened */
|
|
23
|
+
onOpen?: () => void;
|
|
24
|
+
/** Function called when the popup is closed */
|
|
25
|
+
onClose?: () => void;
|
|
26
|
+
}
|
|
27
|
+
interface PopupState {
|
|
28
|
+
isShown: boolean;
|
|
29
|
+
position: RelativePosition;
|
|
30
|
+
}
|
|
31
|
+
/** Popup React component */
|
|
32
|
+
export declare class Popup extends React.Component<PopupProps, PopupState> {
|
|
33
|
+
private _popupRef;
|
|
34
|
+
private _targetElement?;
|
|
35
|
+
constructor(props: PopupProps, context?: any);
|
|
36
|
+
static defaultProps: Partial<PopupProps>;
|
|
37
|
+
componentDidMount(): void;
|
|
38
|
+
componentDidUpdate(previousProps: PopupProps): void;
|
|
39
|
+
componentWillUnmount(): void;
|
|
40
|
+
private _onBodyClick;
|
|
41
|
+
private _onEsc;
|
|
42
|
+
private _onShow;
|
|
43
|
+
private _onClose;
|
|
44
|
+
private _getContext;
|
|
45
|
+
private getPositionClassName;
|
|
46
|
+
private getPositionWithinViewport;
|
|
47
|
+
render(): JSX.Element;
|
|
48
|
+
}
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=Popup.d.ts.map
|
|
@@ -0,0 +1,246 @@
|
|
|
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
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.Popup = void 0;
|
|
30
|
+
const React = __importStar(require("react"));
|
|
31
|
+
const classnames_1 = __importDefault(require("classnames"));
|
|
32
|
+
const appui_abstract_1 = require("@itwin/appui-abstract");
|
|
33
|
+
require("./Popup.scss");
|
|
34
|
+
/** Popup React component */
|
|
35
|
+
class Popup extends React.Component {
|
|
36
|
+
constructor(props, context) {
|
|
37
|
+
super(props, context);
|
|
38
|
+
this._popupRef = React.createRef();
|
|
39
|
+
this._onBodyClick = (event) => {
|
|
40
|
+
const context = this._getContext();
|
|
41
|
+
// Ignore clicks on the popover or button
|
|
42
|
+
if (context === event.target) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (context && context.contains(event.target)) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (this._popupRef.current &&
|
|
49
|
+
(this._popupRef.current === event.target ||
|
|
50
|
+
this._popupRef.current.contains(event.target))) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
this._onClose();
|
|
54
|
+
};
|
|
55
|
+
this._onEsc = (event) => {
|
|
56
|
+
// Esc key
|
|
57
|
+
if (event.key === "Escape") {
|
|
58
|
+
this._onClose();
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
this._getContext = () => this.props.context || this._targetElement;
|
|
62
|
+
this.state = { isShown: this.props.isShown, position: this.props.position };
|
|
63
|
+
}
|
|
64
|
+
componentDidMount() {
|
|
65
|
+
const popupElement = this._popupRef.current;
|
|
66
|
+
if (popupElement && popupElement.parentElement) {
|
|
67
|
+
this._targetElement = popupElement.parentElement;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
componentDidUpdate(previousProps) {
|
|
71
|
+
if (this.props.isShown === previousProps.isShown)
|
|
72
|
+
return;
|
|
73
|
+
if (this.props.isShown) {
|
|
74
|
+
this._onShow();
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
this._onClose();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
componentWillUnmount() {
|
|
81
|
+
document.body.removeEventListener("click", this._onBodyClick, false);
|
|
82
|
+
document.body.removeEventListener("keydown", this._onEsc, false);
|
|
83
|
+
}
|
|
84
|
+
_onShow() {
|
|
85
|
+
if (this.state.isShown) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
document.addEventListener("click", this._onBodyClick, true);
|
|
89
|
+
document.addEventListener("keydown", this._onEsc, true);
|
|
90
|
+
const newPosition = this.getPositionWithinViewport();
|
|
91
|
+
this.setState({ position: newPosition, isShown: true }, () => {
|
|
92
|
+
if (this.props.onOpen)
|
|
93
|
+
this.props.onOpen();
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
_onClose() {
|
|
97
|
+
if (!this.state.isShown) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
document.removeEventListener("click", this._onBodyClick, true);
|
|
101
|
+
document.removeEventListener("keydown", this._onEsc, true);
|
|
102
|
+
// tslint:disable-next-line:tslint-react-set-state-usage
|
|
103
|
+
this.setState({ isShown: false, position: this.props.position }, () => {
|
|
104
|
+
if (this.props.onClose)
|
|
105
|
+
this.props.onClose();
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
getPositionClassName(position) {
|
|
109
|
+
switch (position) {
|
|
110
|
+
case appui_abstract_1.RelativePosition.TopLeft:
|
|
111
|
+
return classnames_1.default("tree-widget-search-popup-top-left");
|
|
112
|
+
case appui_abstract_1.RelativePosition.TopRight:
|
|
113
|
+
return classnames_1.default("tree-widget-search-popup-top-right");
|
|
114
|
+
case appui_abstract_1.RelativePosition.BottomLeft:
|
|
115
|
+
return classnames_1.default("tree-widget-search-popup-bottom-left");
|
|
116
|
+
case appui_abstract_1.RelativePosition.BottomRight:
|
|
117
|
+
return classnames_1.default("tree-widget-search-popup-bottom-right");
|
|
118
|
+
case appui_abstract_1.RelativePosition.Top:
|
|
119
|
+
return classnames_1.default("tree-widget-search-popup-top");
|
|
120
|
+
case appui_abstract_1.RelativePosition.Left:
|
|
121
|
+
return classnames_1.default("tree-widget-search-popup-left");
|
|
122
|
+
case appui_abstract_1.RelativePosition.Right:
|
|
123
|
+
return classnames_1.default("tree-widget-search-popup-right");
|
|
124
|
+
default:
|
|
125
|
+
return classnames_1.default("tree-widget-search-popup-bottom");
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
getPositionWithinViewport() {
|
|
129
|
+
const popupElement = this._popupRef.current;
|
|
130
|
+
if (!popupElement || !this._targetElement)
|
|
131
|
+
return this.props.position;
|
|
132
|
+
// Note: Cannot use DOMRect yet since it's experimental and not available in all browsers (Nov. 2018)
|
|
133
|
+
const viewportRect = {
|
|
134
|
+
left: window.scrollX,
|
|
135
|
+
top: window.scrollY,
|
|
136
|
+
right: window.scrollX + window.innerWidth,
|
|
137
|
+
bottom: window.scrollY + window.innerHeight,
|
|
138
|
+
};
|
|
139
|
+
const targetRect = this._targetElement.getBoundingClientRect();
|
|
140
|
+
const popupRect = popupElement.getBoundingClientRect();
|
|
141
|
+
const containerStyle = window.getComputedStyle(this._targetElement);
|
|
142
|
+
const offset = this.props.showArrow ? 12 : 4;
|
|
143
|
+
switch (this.props.position) {
|
|
144
|
+
case appui_abstract_1.RelativePosition.BottomRight: {
|
|
145
|
+
const bottomMargin = containerStyle.marginBottom
|
|
146
|
+
? parseFloat(containerStyle.marginBottom)
|
|
147
|
+
: 0;
|
|
148
|
+
if (targetRect.bottom + popupRect.height + bottomMargin + offset >
|
|
149
|
+
viewportRect.bottom) {
|
|
150
|
+
return appui_abstract_1.RelativePosition.TopRight;
|
|
151
|
+
}
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
case appui_abstract_1.RelativePosition.TopRight: {
|
|
155
|
+
const topMargin = containerStyle.marginTop
|
|
156
|
+
? parseFloat(containerStyle.marginTop)
|
|
157
|
+
: 0;
|
|
158
|
+
if (targetRect.top - popupRect.height - topMargin - offset <
|
|
159
|
+
viewportRect.top) {
|
|
160
|
+
return appui_abstract_1.RelativePosition.BottomRight;
|
|
161
|
+
}
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
case appui_abstract_1.RelativePosition.TopLeft: {
|
|
165
|
+
const topMargin = containerStyle.marginTop
|
|
166
|
+
? parseFloat(containerStyle.marginTop)
|
|
167
|
+
: 0;
|
|
168
|
+
if (targetRect.top - popupRect.height - topMargin - offset <
|
|
169
|
+
viewportRect.top) {
|
|
170
|
+
return appui_abstract_1.RelativePosition.BottomLeft;
|
|
171
|
+
}
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
case appui_abstract_1.RelativePosition.BottomLeft: {
|
|
175
|
+
const bottomMargin = containerStyle.marginBottom
|
|
176
|
+
? parseFloat(containerStyle.marginBottom)
|
|
177
|
+
: 0;
|
|
178
|
+
if (targetRect.bottom + popupRect.height + bottomMargin + offset >
|
|
179
|
+
viewportRect.bottom) {
|
|
180
|
+
return appui_abstract_1.RelativePosition.TopLeft;
|
|
181
|
+
}
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
case appui_abstract_1.RelativePosition.Bottom: {
|
|
185
|
+
const bottomMargin = containerStyle.marginBottom
|
|
186
|
+
? parseFloat(containerStyle.marginBottom)
|
|
187
|
+
: 0;
|
|
188
|
+
if (targetRect.bottom + popupRect.height + bottomMargin + offset >
|
|
189
|
+
viewportRect.bottom) {
|
|
190
|
+
return appui_abstract_1.RelativePosition.Top;
|
|
191
|
+
}
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
case appui_abstract_1.RelativePosition.Top: {
|
|
195
|
+
const topMargin = containerStyle.marginTop
|
|
196
|
+
? parseFloat(containerStyle.marginTop)
|
|
197
|
+
: 0;
|
|
198
|
+
if (targetRect.top - popupRect.height - topMargin - offset <
|
|
199
|
+
viewportRect.top) {
|
|
200
|
+
return appui_abstract_1.RelativePosition.Bottom;
|
|
201
|
+
}
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
case appui_abstract_1.RelativePosition.Left: {
|
|
205
|
+
const leftMargin = containerStyle.marginLeft
|
|
206
|
+
? parseFloat(containerStyle.marginLeft)
|
|
207
|
+
: 0;
|
|
208
|
+
if (targetRect.left - popupRect.width - leftMargin - offset <
|
|
209
|
+
viewportRect.left) {
|
|
210
|
+
return appui_abstract_1.RelativePosition.Right;
|
|
211
|
+
}
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
case appui_abstract_1.RelativePosition.Right: {
|
|
215
|
+
const rightMargin = containerStyle.marginRight
|
|
216
|
+
? parseFloat(containerStyle.marginRight)
|
|
217
|
+
: 0;
|
|
218
|
+
if (targetRect.right + popupRect.width + rightMargin + offset >
|
|
219
|
+
viewportRect.right) {
|
|
220
|
+
return appui_abstract_1.RelativePosition.Left;
|
|
221
|
+
}
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return this.props.position;
|
|
226
|
+
}
|
|
227
|
+
render() {
|
|
228
|
+
const className = classnames_1.default("tree-widget-search-popup", this.getPositionClassName(this.state.position), this.props.showShadow && "tree-widget-search-popup-shadow", this.state.isShown && "visible", this.props.showArrow && "arrow", this.props.className);
|
|
229
|
+
let style;
|
|
230
|
+
if (this.props.fixedPosition) {
|
|
231
|
+
style = {
|
|
232
|
+
top: this.props.fixedPosition.top,
|
|
233
|
+
left: this.props.fixedPosition.left,
|
|
234
|
+
position: "fixed",
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
return (React.createElement("div", { style: style, className: className, ref: this._popupRef }, this.props.children));
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
exports.Popup = Popup;
|
|
241
|
+
Popup.defaultProps = {
|
|
242
|
+
position: appui_abstract_1.RelativePosition.Bottom,
|
|
243
|
+
showShadow: true,
|
|
244
|
+
showArrow: false,
|
|
245
|
+
};
|
|
246
|
+
//# sourceMappingURL=Popup.js.map
|