@itwin/presentation-hierarchies-react 0.1.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 +14 -0
- package/LICENSE.md +9 -0
- package/README.md +303 -0
- package/lib/cjs/presentation-hierarchies-react/TreeNode.d.ts +75 -0
- package/lib/cjs/presentation-hierarchies-react/TreeNode.d.ts.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/TreeNode.js +16 -0
- package/lib/cjs/presentation-hierarchies-react/TreeNode.js.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/UnifiedSelectionContext.d.ts +18 -0
- package/lib/cjs/presentation-hierarchies-react/UnifiedSelectionContext.d.ts.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/UnifiedSelectionContext.js +28 -0
- package/lib/cjs/presentation-hierarchies-react/UnifiedSelectionContext.js.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/UseSelectionHandler.d.ts +33 -0
- package/lib/cjs/presentation-hierarchies-react/UseSelectionHandler.d.ts.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/UseSelectionHandler.js +102 -0
- package/lib/cjs/presentation-hierarchies-react/UseSelectionHandler.js.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/UseTree.d.ts +85 -0
- package/lib/cjs/presentation-hierarchies-react/UseTree.d.ts.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/UseTree.js +214 -0
- package/lib/cjs/presentation-hierarchies-react/UseTree.js.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/internal/TreeActions.d.ts +27 -0
- package/lib/cjs/presentation-hierarchies-react/internal/TreeActions.d.ts.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/internal/TreeActions.js +236 -0
- package/lib/cjs/presentation-hierarchies-react/internal/TreeActions.js.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/internal/TreeLoader.d.ts +33 -0
- package/lib/cjs/presentation-hierarchies-react/internal/TreeLoader.d.ts.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/internal/TreeLoader.js +71 -0
- package/lib/cjs/presentation-hierarchies-react/internal/TreeLoader.js.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/internal/TreeModel.d.ts +70 -0
- package/lib/cjs/presentation-hierarchies-react/internal/TreeModel.d.ts.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/internal/TreeModel.js +154 -0
- package/lib/cjs/presentation-hierarchies-react/internal/TreeModel.js.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts +16 -0
- package/lib/cjs/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/internal/UseUnifiedSelection.js +96 -0
- package/lib/cjs/presentation-hierarchies-react/internal/UseUnifiedSelection.js.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/internal/Utils.d.ts +8 -0
- package/lib/cjs/presentation-hierarchies-react/internal/Utils.d.ts.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/internal/Utils.js +45 -0
- package/lib/cjs/presentation-hierarchies-react/internal/Utils.js.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/itwinui/LocalizationContext.d.ts +57 -0
- package/lib/cjs/presentation-hierarchies-react/itwinui/LocalizationContext.d.ts.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/itwinui/LocalizationContext.js +35 -0
- package/lib/cjs/presentation-hierarchies-react/itwinui/LocalizationContext.js.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/itwinui/TreeNodeRenderer.css +17 -0
- package/lib/cjs/presentation-hierarchies-react/itwinui/TreeNodeRenderer.d.ts +27 -0
- package/lib/cjs/presentation-hierarchies-react/itwinui/TreeNodeRenderer.d.ts.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/itwinui/TreeNodeRenderer.js +101 -0
- package/lib/cjs/presentation-hierarchies-react/itwinui/TreeNodeRenderer.js.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/itwinui/TreeRenderer.d.ts +55 -0
- package/lib/cjs/presentation-hierarchies-react/itwinui/TreeRenderer.d.ts.map +1 -0
- package/lib/cjs/presentation-hierarchies-react/itwinui/TreeRenderer.js +83 -0
- package/lib/cjs/presentation-hierarchies-react/itwinui/TreeRenderer.js.map +1 -0
- package/lib/cjs/presentation-hierarchies-react.d.ts +10 -0
- package/lib/cjs/presentation-hierarchies-react.d.ts.map +1 -0
- package/lib/cjs/presentation-hierarchies-react.js +27 -0
- package/lib/cjs/presentation-hierarchies-react.js.map +1 -0
- package/lib/esm/presentation-hierarchies-react/TreeNode.d.ts +75 -0
- package/lib/esm/presentation-hierarchies-react/TreeNode.d.ts.map +1 -0
- package/lib/esm/presentation-hierarchies-react/TreeNode.js +12 -0
- package/lib/esm/presentation-hierarchies-react/TreeNode.js.map +1 -0
- package/lib/esm/presentation-hierarchies-react/UnifiedSelectionContext.d.ts +18 -0
- package/lib/esm/presentation-hierarchies-react/UnifiedSelectionContext.d.ts.map +1 -0
- package/lib/esm/presentation-hierarchies-react/UnifiedSelectionContext.js +23 -0
- package/lib/esm/presentation-hierarchies-react/UnifiedSelectionContext.js.map +1 -0
- package/lib/esm/presentation-hierarchies-react/UseSelectionHandler.d.ts +33 -0
- package/lib/esm/presentation-hierarchies-react/UseSelectionHandler.d.ts.map +1 -0
- package/lib/esm/presentation-hierarchies-react/UseSelectionHandler.js +98 -0
- package/lib/esm/presentation-hierarchies-react/UseSelectionHandler.js.map +1 -0
- package/lib/esm/presentation-hierarchies-react/UseTree.d.ts +85 -0
- package/lib/esm/presentation-hierarchies-react/UseTree.d.ts.map +1 -0
- package/lib/esm/presentation-hierarchies-react/UseTree.js +209 -0
- package/lib/esm/presentation-hierarchies-react/UseTree.js.map +1 -0
- package/lib/esm/presentation-hierarchies-react/internal/TreeActions.d.ts +27 -0
- package/lib/esm/presentation-hierarchies-react/internal/TreeActions.d.ts.map +1 -0
- package/lib/esm/presentation-hierarchies-react/internal/TreeActions.js +232 -0
- package/lib/esm/presentation-hierarchies-react/internal/TreeActions.js.map +1 -0
- package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.d.ts +33 -0
- package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.d.ts.map +1 -0
- package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.js +67 -0
- package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.js.map +1 -0
- package/lib/esm/presentation-hierarchies-react/internal/TreeModel.d.ts +70 -0
- package/lib/esm/presentation-hierarchies-react/internal/TreeModel.d.ts.map +1 -0
- package/lib/esm/presentation-hierarchies-react/internal/TreeModel.js +149 -0
- package/lib/esm/presentation-hierarchies-react/internal/TreeModel.js.map +1 -0
- package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts +16 -0
- package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts.map +1 -0
- package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.js +92 -0
- package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.js.map +1 -0
- package/lib/esm/presentation-hierarchies-react/internal/Utils.d.ts +8 -0
- package/lib/esm/presentation-hierarchies-react/internal/Utils.d.ts.map +1 -0
- package/lib/esm/presentation-hierarchies-react/internal/Utils.js +40 -0
- package/lib/esm/presentation-hierarchies-react/internal/Utils.js.map +1 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/LocalizationContext.d.ts +57 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/LocalizationContext.d.ts.map +1 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/LocalizationContext.js +30 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/LocalizationContext.js.map +1 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeNodeRenderer.css +17 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeNodeRenderer.d.ts +27 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeNodeRenderer.d.ts.map +1 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeNodeRenderer.js +94 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeNodeRenderer.js.map +1 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeRenderer.d.ts +55 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeRenderer.d.ts.map +1 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeRenderer.js +78 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeRenderer.js.map +1 -0
- package/lib/esm/presentation-hierarchies-react.d.ts +10 -0
- package/lib/esm/presentation-hierarchies-react.d.ts.map +1 -0
- package/lib/esm/presentation-hierarchies-react.js +13 -0
- package/lib/esm/presentation-hierarchies-react.js.map +1 -0
- package/package.json +103 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { PropsWithChildren } from "react";
|
|
2
|
+
/** @internal */
|
|
3
|
+
export interface LocalizedStrings {
|
|
4
|
+
/**
|
|
5
|
+
* Message displayed when nodes are loading.
|
|
6
|
+
* Default value: `Loading...`.
|
|
7
|
+
*/
|
|
8
|
+
loading: string;
|
|
9
|
+
/**
|
|
10
|
+
* Title for apply hierarchy filter button.
|
|
11
|
+
* Default value: `Apply filter`.
|
|
12
|
+
*/
|
|
13
|
+
filterHierarchyLevel: string;
|
|
14
|
+
/**
|
|
15
|
+
* Title for clear hierarchy filter button.
|
|
16
|
+
* Default value: `Clear active filter`.
|
|
17
|
+
*/
|
|
18
|
+
clearHierarchyLevelFilter: string;
|
|
19
|
+
/**
|
|
20
|
+
* Message displayed when no nodes matching filter are found.
|
|
21
|
+
* Default value: `No child nodes match current filter`.
|
|
22
|
+
*/
|
|
23
|
+
noFilteredChildren: string;
|
|
24
|
+
/**
|
|
25
|
+
* Message displayed when result limit exceeds hierarchy size limit.
|
|
26
|
+
* Default value: `There are more items than allowed limit of {{limit}}.`.
|
|
27
|
+
*/
|
|
28
|
+
resultLimitExceeded: string;
|
|
29
|
+
/**
|
|
30
|
+
* Message displayed when result limit exceeds hierarchy size limit and hierarchy filtering is enabled.
|
|
31
|
+
* Default value: `Please provide <link>additional filtering</link> - there are more items than allowed limit of {{limit}}.`.
|
|
32
|
+
*/
|
|
33
|
+
resultLimitExceededWithFiltering: string;
|
|
34
|
+
/**
|
|
35
|
+
* Message displayed when hierarchy size limit can be overridden.
|
|
36
|
+
* Default value: `<link>Increase the hierarchy level size limit to {{limit}}.</link>`.
|
|
37
|
+
*/
|
|
38
|
+
increaseHierarchyLimit: string;
|
|
39
|
+
/**
|
|
40
|
+
* Message displayed when hierarchy size limit can be overridden and hierarchy filtering is enabled.
|
|
41
|
+
* Default value: `Or, <link>increase the hierarchy level size limit to {{limit}}.</link>`.
|
|
42
|
+
*/
|
|
43
|
+
increaseHierarchyLimitWithFiltering: string;
|
|
44
|
+
}
|
|
45
|
+
/** @internal */
|
|
46
|
+
export interface LocalizationContext {
|
|
47
|
+
localizedStrings: LocalizedStrings;
|
|
48
|
+
}
|
|
49
|
+
interface LocalizationContextProviderProps {
|
|
50
|
+
localizedStrings?: Partial<LocalizedStrings>;
|
|
51
|
+
}
|
|
52
|
+
/** @beta */
|
|
53
|
+
export declare function LocalizationContextProvider({ localizedStrings, children }: PropsWithChildren<LocalizationContextProviderProps>): import("react/jsx-runtime").JSX.Element;
|
|
54
|
+
/** @internal */
|
|
55
|
+
export declare function useLocalizationContext(): LocalizationContext;
|
|
56
|
+
export {};
|
|
57
|
+
//# sourceMappingURL=LocalizationContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalizationContext.d.ts","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/itwinui/LocalizationContext.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAiB,iBAAiB,EAAmC,MAAM,OAAO,CAAC;AAE1F,gBAAgB;AAChB,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,oBAAoB,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,yBAAyB,EAAE,MAAM,CAAC;IAClC;;;OAGG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,gCAAgC,EAAE,MAAM,CAAC;IACzC;;;OAGG;IACH,sBAAsB,EAAE,MAAM,CAAC;IAC/B;;;OAGG;IACH,mCAAmC,EAAE,MAAM,CAAC;CAC7C;AAED,gBAAgB;AAChB,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAeD,UAAU,gCAAgC;IACxC,gBAAgB,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC9C;AAED,YAAY;AACZ,wBAAgB,2BAA2B,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAAE,iBAAiB,CAAC,gCAAgC,CAAC,2CAQ9H;AAED,gBAAgB;AAChB,wBAAgB,sBAAsB,wBAErC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useLocalizationContext = exports.LocalizationContextProvider = 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
|
+
const react_1 = require("react");
|
|
10
|
+
const defaultLocalizedStrings = {
|
|
11
|
+
loading: "Loading...",
|
|
12
|
+
filterHierarchyLevel: "Apply filter",
|
|
13
|
+
clearHierarchyLevelFilter: "Clear active filter",
|
|
14
|
+
noFilteredChildren: "No child nodes match current filter",
|
|
15
|
+
resultLimitExceeded: "There are more items than allowed limit of {{limit}}.",
|
|
16
|
+
resultLimitExceededWithFiltering: "Please provide <link>additional filtering</link> - there are more items than allowed limit of {{limit}}.",
|
|
17
|
+
increaseHierarchyLimit: "<link>Increase the hierarchy level size limit to {{limit}}.</link>",
|
|
18
|
+
increaseHierarchyLimitWithFiltering: "Or, <link>increase the hierarchy level size limit to {{limit}}.</link>",
|
|
19
|
+
};
|
|
20
|
+
const localizationContext = (0, react_1.createContext)({ localizedStrings: defaultLocalizedStrings });
|
|
21
|
+
/** @beta */
|
|
22
|
+
function LocalizationContextProvider({ localizedStrings, children }) {
|
|
23
|
+
const [state, setState] = (0, react_1.useState)({ localizedStrings: { ...defaultLocalizedStrings, ...localizedStrings } });
|
|
24
|
+
(0, react_1.useEffect)(() => {
|
|
25
|
+
setState({ localizedStrings: { ...defaultLocalizedStrings, ...localizedStrings } });
|
|
26
|
+
}, [localizedStrings]);
|
|
27
|
+
return (0, jsx_runtime_1.jsx)(localizationContext.Provider, { value: state, children: children });
|
|
28
|
+
}
|
|
29
|
+
exports.LocalizationContextProvider = LocalizationContextProvider;
|
|
30
|
+
/** @internal */
|
|
31
|
+
function useLocalizationContext() {
|
|
32
|
+
return (0, react_1.useContext)(localizationContext);
|
|
33
|
+
}
|
|
34
|
+
exports.useLocalizationContext = useLocalizationContext;
|
|
35
|
+
//# sourceMappingURL=LocalizationContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalizationContext.js","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/itwinui/LocalizationContext.tsx"],"names":[],"mappings":";;;;AAAA;;;gGAGgG;AAEhG,iCAA0F;AAmD1F,MAAM,uBAAuB,GAAqB;IAChD,OAAO,EAAE,YAAY;IACrB,oBAAoB,EAAE,cAAc;IACpC,yBAAyB,EAAE,qBAAqB;IAChD,kBAAkB,EAAE,qCAAqC;IACzD,mBAAmB,EAAE,uDAAuD;IAC5E,gCAAgC,EAAE,0GAA0G;IAC5I,sBAAsB,EAAE,oEAAoE;IAC5F,mCAAmC,EAAE,wEAAwE;CAC9G,CAAC;AAEF,MAAM,mBAAmB,GAAG,IAAA,qBAAa,EAAsB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,CAAC,CAAC;AAM9G,YAAY;AACZ,SAAgB,2BAA2B,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAuD;IAC7H,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAC,EAAE,gBAAgB,EAAE,EAAE,GAAG,uBAAuB,EAAE,GAAG,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAE9G,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,QAAQ,CAAC,EAAE,gBAAgB,EAAE,EAAE,GAAG,uBAAuB,EAAE,GAAG,gBAAgB,EAAE,EAAE,CAAC,CAAC;IACtF,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvB,OAAO,uBAAC,mBAAmB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAgC,CAAC;AAC/F,CAAC;AARD,kEAQC;AAED,gBAAgB;AAChB,SAAgB,sBAAsB;IACpC,OAAO,IAAA,kBAAU,EAAC,mBAAmB,CAAC,CAAC;AACzC,CAAC;AAFD,wDAEC","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 { createContext, PropsWithChildren, useContext, useEffect, useState } from \"react\";\n\n/** @internal */\nexport interface LocalizedStrings {\n /**\n * Message displayed when nodes are loading.\n * Default value: `Loading...`.\n */\n loading: string;\n /**\n * Title for apply hierarchy filter button.\n * Default value: `Apply filter`.\n */\n filterHierarchyLevel: string;\n /**\n * Title for clear hierarchy filter button.\n * Default value: `Clear active filter`.\n */\n clearHierarchyLevelFilter: string;\n /**\n * Message displayed when no nodes matching filter are found.\n * Default value: `No child nodes match current filter`.\n */\n noFilteredChildren: string;\n /**\n * Message displayed when result limit exceeds hierarchy size limit.\n * Default value: `There are more items than allowed limit of {{limit}}.`.\n */\n resultLimitExceeded: string;\n /**\n * Message displayed when result limit exceeds hierarchy size limit and hierarchy filtering is enabled.\n * Default value: `Please provide <link>additional filtering</link> - there are more items than allowed limit of {{limit}}.`.\n */\n resultLimitExceededWithFiltering: string;\n /**\n * Message displayed when hierarchy size limit can be overridden.\n * Default value: `<link>Increase the hierarchy level size limit to {{limit}}.</link>`.\n */\n increaseHierarchyLimit: string;\n /**\n * Message displayed when hierarchy size limit can be overridden and hierarchy filtering is enabled.\n * Default value: `Or, <link>increase the hierarchy level size limit to {{limit}}.</link>`.\n */\n increaseHierarchyLimitWithFiltering: string;\n}\n\n/** @internal */\nexport interface LocalizationContext {\n localizedStrings: LocalizedStrings;\n}\n\nconst defaultLocalizedStrings: LocalizedStrings = {\n loading: \"Loading...\",\n filterHierarchyLevel: \"Apply filter\",\n clearHierarchyLevelFilter: \"Clear active filter\",\n noFilteredChildren: \"No child nodes match current filter\",\n resultLimitExceeded: \"There are more items than allowed limit of {{limit}}.\",\n resultLimitExceededWithFiltering: \"Please provide <link>additional filtering</link> - there are more items than allowed limit of {{limit}}.\",\n increaseHierarchyLimit: \"<link>Increase the hierarchy level size limit to {{limit}}.</link>\",\n increaseHierarchyLimitWithFiltering: \"Or, <link>increase the hierarchy level size limit to {{limit}}.</link>\",\n};\n\nconst localizationContext = createContext<LocalizationContext>({ localizedStrings: defaultLocalizedStrings });\n\ninterface LocalizationContextProviderProps {\n localizedStrings?: Partial<LocalizedStrings>;\n}\n\n/** @beta */\nexport function LocalizationContextProvider({ localizedStrings, children }: PropsWithChildren<LocalizationContextProviderProps>) {\n const [state, setState] = useState({ localizedStrings: { ...defaultLocalizedStrings, ...localizedStrings } });\n\n useEffect(() => {\n setState({ localizedStrings: { ...defaultLocalizedStrings, ...localizedStrings } });\n }, [localizedStrings]);\n\n return <localizationContext.Provider value={state}>{children}</localizationContext.Provider>;\n}\n\n/** @internal */\nexport function useLocalizationContext() {\n return useContext(localizationContext);\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
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
|
+
.stateless-tree-node {
|
|
7
|
+
user-select: none;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.stateless-tree-node .action-buttons {
|
|
11
|
+
visibility: hidden;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.stateless-tree-node:hover .action-buttons,
|
|
15
|
+
.stateless-tree-node.filtered .action-buttons {
|
|
16
|
+
visibility: visible;
|
|
17
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import "./TreeNodeRenderer.css";
|
|
2
|
+
import { ComponentPropsWithoutRef, ReactElement } from "react";
|
|
3
|
+
import { TreeNode } from "@itwin/itwinui-react";
|
|
4
|
+
import { PresentationHierarchyNode } from "../TreeNode";
|
|
5
|
+
import { useTree } from "../UseTree";
|
|
6
|
+
import { RenderedTreeNode } from "./TreeRenderer";
|
|
7
|
+
type TreeNodeProps = ComponentPropsWithoutRef<typeof TreeNode>;
|
|
8
|
+
interface TreeNodeRendererOwnProps {
|
|
9
|
+
node: RenderedTreeNode;
|
|
10
|
+
onFilterClick?: (nodeId: string | undefined) => void;
|
|
11
|
+
getIcon?: (node: PresentationHierarchyNode) => ReactElement | undefined;
|
|
12
|
+
getSublabel?: (node: PresentationHierarchyNode) => ReactElement | undefined;
|
|
13
|
+
onNodeClick?: (nodeId: string, isSelected: boolean, event: React.MouseEvent<HTMLElement, MouseEvent>) => void;
|
|
14
|
+
onNodeKeyDown?: (nodeId: string, isSelected: boolean, event: React.KeyboardEvent<HTMLElement>) => void;
|
|
15
|
+
actionButtonsClassName?: string;
|
|
16
|
+
}
|
|
17
|
+
type TreeNodeRendererProps = Pick<ReturnType<typeof useTree>, "expandNode"> & Partial<Pick<ReturnType<typeof useTree>, "getHierarchyLevelDetails">> & Omit<TreeNodeProps, "label" | "onExpanded" | "onSelected" | "icon"> & TreeNodeRendererOwnProps;
|
|
18
|
+
/**
|
|
19
|
+
* A component that renders `RenderedTreeNode` using the `TreeNode` component from `@itwin/itwinui-react`.
|
|
20
|
+
*
|
|
21
|
+
* @see `TreeRenderer`
|
|
22
|
+
* @see https://itwinui.bentley.com/docs/tree
|
|
23
|
+
* @beta
|
|
24
|
+
*/
|
|
25
|
+
export declare function TreeNodeRenderer({ node, expandNode, getIcon, getSublabel, onFilterClick, onNodeClick, onNodeKeyDown, isSelected, isDisabled, actionButtonsClassName, getHierarchyLevelDetails, ...nodeProps }: TreeNodeRendererProps): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=TreeNodeRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeNodeRenderer.d.ts","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/itwinui/TreeNodeRenderer.tsx"],"names":[],"mappings":"AAKA,OAAO,wBAAwB,CAAC;AAEhC,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE/D,OAAO,EAA+D,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE7G,OAAO,EAA+B,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,KAAK,aAAa,GAAG,wBAAwB,CAAC,OAAO,QAAQ,CAAC,CAAC;AAE/D,UAAU,wBAAwB;IAChC,IAAI,EAAE,gBAAgB,CAAC;IACvB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACrD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,yBAAyB,KAAK,YAAY,GAAG,SAAS,CAAC;IACxE,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,yBAAyB,KAAK,YAAY,GAAG,SAAS,CAAC;IAC5E,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,KAAK,IAAI,CAAC;IAC9G,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACvG,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,KAAK,qBAAqB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,OAAO,CAAC,EAAE,YAAY,CAAC,GACzE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,OAAO,CAAC,EAAE,0BAA0B,CAAC,CAAC,GACrE,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,YAAY,GAAG,YAAY,GAAG,MAAM,CAAC,GACnE,wBAAwB,CAAC;AAE3B;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,UAAU,EACV,OAAO,EACP,WAAW,EACX,aAAa,EACb,WAAW,EACX,aAAa,EACb,UAAU,EACV,UAAU,EACV,sBAAsB,EACtB,wBAAwB,EACxB,GAAG,SAAS,EACb,EAAE,qBAAqB,2CAuFvB"}
|
|
@@ -0,0 +1,101 @@
|
|
|
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.TreeNodeRenderer = void 0;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
/*---------------------------------------------------------------------------------------------
|
|
9
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
10
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
11
|
+
*--------------------------------------------------------------------------------------------*/
|
|
12
|
+
require("./TreeNodeRenderer.css");
|
|
13
|
+
const classnames_1 = __importDefault(require("classnames"));
|
|
14
|
+
const itwinui_icons_react_1 = require("@itwin/itwinui-icons-react");
|
|
15
|
+
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
16
|
+
const Utils_1 = require("../internal/Utils");
|
|
17
|
+
const TreeNode_1 = require("../TreeNode");
|
|
18
|
+
const LocalizationContext_1 = require("./LocalizationContext");
|
|
19
|
+
/**
|
|
20
|
+
* A component that renders `RenderedTreeNode` using the `TreeNode` component from `@itwin/itwinui-react`.
|
|
21
|
+
*
|
|
22
|
+
* @see `TreeRenderer`
|
|
23
|
+
* @see https://itwinui.bentley.com/docs/tree
|
|
24
|
+
* @beta
|
|
25
|
+
*/
|
|
26
|
+
function TreeNodeRenderer({ node, expandNode, getIcon, getSublabel, onFilterClick, onNodeClick, onNodeKeyDown, isSelected, isDisabled, actionButtonsClassName, getHierarchyLevelDetails, ...nodeProps }) {
|
|
27
|
+
const { localizedStrings } = (0, LocalizationContext_1.useLocalizationContext)();
|
|
28
|
+
if ("type" in node && node.type === "ChildrenPlaceholder") {
|
|
29
|
+
return (0, jsx_runtime_1.jsx)(PlaceholderNode, { ...nodeProps });
|
|
30
|
+
}
|
|
31
|
+
if ((0, TreeNode_1.isPresentationHierarchyNode)(node)) {
|
|
32
|
+
return (
|
|
33
|
+
// eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
|
|
34
|
+
(0, jsx_runtime_1.jsx)("div", { onClick: (event) => !isDisabled && onNodeClick?.(node.id, !isSelected, event), onKeyDown: (event) => {
|
|
35
|
+
// Ignore if it is called on the element inside, e.g. checkbox or expander
|
|
36
|
+
if (!isDisabled && event.target instanceof HTMLElement && event.target.classList.contains("stateless-tree-node")) {
|
|
37
|
+
onNodeKeyDown?.(node.id, !isSelected, event);
|
|
38
|
+
}
|
|
39
|
+
}, children: (0, jsx_runtime_1.jsx)(itwinui_react_1.TreeNode, { ...nodeProps, isSelected: isSelected, isDisabled: isDisabled, className: (0, classnames_1.default)(nodeProps.className, "stateless-tree-node", { filtered: node.isFiltered }), label: node.label, onExpanded: (_, isExpanded) => {
|
|
40
|
+
expandNode(node.id, isExpanded);
|
|
41
|
+
}, icon: getIcon ? getIcon(node) : undefined, sublabel: getSublabel ? getSublabel(node) : undefined, children: (0, jsx_runtime_1.jsxs)(itwinui_react_1.ButtonGroup, { className: (0, classnames_1.default)("action-buttons", actionButtonsClassName), children: [getHierarchyLevelDetails && node.isFiltered ? ((0, jsx_runtime_1.jsx)(itwinui_react_1.IconButton, { className: "filtering-action-button", styleType: "borderless", size: "small", title: localizedStrings.clearHierarchyLevelFilter, onClick: (e) => {
|
|
42
|
+
e.stopPropagation();
|
|
43
|
+
getHierarchyLevelDetails(node.id)?.setInstanceFilter(undefined);
|
|
44
|
+
}, children: (0, jsx_runtime_1.jsx)(itwinui_icons_react_1.SvgRemove, {}) })) : null, onFilterClick && node.isFilterable ? ((0, jsx_runtime_1.jsx)(itwinui_react_1.IconButton, { className: "filtering-action-button", styleType: "borderless", size: "small", title: localizedStrings.filterHierarchyLevel, onClick: (e) => {
|
|
45
|
+
e.stopPropagation();
|
|
46
|
+
onFilterClick(node.id);
|
|
47
|
+
}, children: node.isFiltered ? (0, jsx_runtime_1.jsx)(itwinui_icons_react_1.SvgFilter, {}) : (0, jsx_runtime_1.jsx)(itwinui_icons_react_1.SvgFilterHollow, {}) })) : null] }) }) }));
|
|
48
|
+
}
|
|
49
|
+
if (node.type === "ResultSetTooLarge") {
|
|
50
|
+
return ((0, jsx_runtime_1.jsx)(ResultSetTooLargeNode, { ...nodeProps, limit: node.resultSetSizeLimit, onOverrideLimit: getHierarchyLevelDetails ? (limit) => getHierarchyLevelDetails(node.parentNodeId)?.setSizeLimit(limit) : undefined, onFilterClick: onFilterClick
|
|
51
|
+
? () => {
|
|
52
|
+
onFilterClick(node.parentNodeId);
|
|
53
|
+
}
|
|
54
|
+
: undefined }));
|
|
55
|
+
}
|
|
56
|
+
if (node.type === "NoFilterMatches") {
|
|
57
|
+
return (0, jsx_runtime_1.jsx)(itwinui_react_1.TreeNode, { ...nodeProps, label: localizedStrings.noFilteredChildren, isDisabled: true, onExpanded: /* istanbul ignore next */ () => { } });
|
|
58
|
+
}
|
|
59
|
+
return (0, jsx_runtime_1.jsx)(itwinui_react_1.TreeNode, { ...nodeProps, label: node.message, isDisabled: true, onExpanded: /* istanbul ignore next */ () => { } });
|
|
60
|
+
}
|
|
61
|
+
exports.TreeNodeRenderer = TreeNodeRenderer;
|
|
62
|
+
function PlaceholderNode(props) {
|
|
63
|
+
const { localizedStrings } = (0, LocalizationContext_1.useLocalizationContext)();
|
|
64
|
+
return ((0, jsx_runtime_1.jsx)(itwinui_react_1.TreeNode, { ...props, label: localizedStrings.loading, icon: (0, jsx_runtime_1.jsx)(itwinui_react_1.ProgressRadial, { size: "x-small", indeterminate: true, title: localizedStrings.loading }), onExpanded: /* istanbul ignore next */ () => { } }));
|
|
65
|
+
}
|
|
66
|
+
function ResultSetTooLargeNode({ onFilterClick, onOverrideLimit, limit, ...props }) {
|
|
67
|
+
return ((0, jsx_runtime_1.jsx)(itwinui_react_1.TreeNode, { ...props, className: "stateless-tree-node", label: (0, jsx_runtime_1.jsx)(ResultSetTooLargeNodeLabel, { limit: limit, onFilterClick: onFilterClick, onOverrideLimit: onOverrideLimit }), onExpanded: /* istanbul ignore next */ () => { } }));
|
|
68
|
+
}
|
|
69
|
+
function ResultSetTooLargeNodeLabel({ onFilterClick, onOverrideLimit, limit }) {
|
|
70
|
+
const { localizedStrings } = (0, LocalizationContext_1.useLocalizationContext)();
|
|
71
|
+
const supportsFiltering = !!onFilterClick;
|
|
72
|
+
const supportsLimitOverride = !!onOverrideLimit && limit < Utils_1.MAX_LIMIT_OVERRIDE;
|
|
73
|
+
const limitExceededMessage = createLocalizedMessage(supportsFiltering ? localizedStrings.resultLimitExceededWithFiltering : localizedStrings.resultLimitExceeded, limit, onFilterClick);
|
|
74
|
+
const increaseLimitMessage = supportsLimitOverride
|
|
75
|
+
? createLocalizedMessage(supportsFiltering ? localizedStrings.increaseHierarchyLimitWithFiltering : localizedStrings.increaseHierarchyLimit, Utils_1.MAX_LIMIT_OVERRIDE, () => onOverrideLimit(Utils_1.MAX_LIMIT_OVERRIDE))
|
|
76
|
+
: { title: "", element: null };
|
|
77
|
+
const title = `${limitExceededMessage.title} ${increaseLimitMessage.title}`;
|
|
78
|
+
return ((0, jsx_runtime_1.jsxs)(itwinui_react_1.Flex, { flexDirection: "column", gap: "3xs", title: title, alignItems: "start", children: [limitExceededMessage.element, increaseLimitMessage.element] }));
|
|
79
|
+
}
|
|
80
|
+
function createLocalizedMessage(message, limit, onClick) {
|
|
81
|
+
const limitStr = limit.toLocaleString(undefined, { useGrouping: true });
|
|
82
|
+
const messageWithLimit = message.replace("{{limit}}", limitStr);
|
|
83
|
+
const exp = new RegExp("<link>(.*)</link>");
|
|
84
|
+
const match = messageWithLimit.match(exp);
|
|
85
|
+
if (!match) {
|
|
86
|
+
return {
|
|
87
|
+
title: messageWithLimit,
|
|
88
|
+
element: ((0, jsx_runtime_1.jsx)(itwinui_react_1.Flex, { flexDirection: "row", gap: "3xs", children: (0, jsx_runtime_1.jsx)(itwinui_react_1.Text, { children: messageWithLimit }) })),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
const [fullText, innerText] = match;
|
|
92
|
+
const [textBefore, textAfter] = messageWithLimit.split(fullText);
|
|
93
|
+
return {
|
|
94
|
+
title: messageWithLimit.replace(fullText, innerText),
|
|
95
|
+
element: ((0, jsx_runtime_1.jsxs)(itwinui_react_1.Flex, { flexDirection: "row", gap: "3xs", children: [textBefore ? (0, jsx_runtime_1.jsx)(itwinui_react_1.Text, { children: textBefore }) : null, (0, jsx_runtime_1.jsx)(itwinui_react_1.Anchor, { underline: true, onClick: (e) => {
|
|
96
|
+
e.stopPropagation();
|
|
97
|
+
onClick?.();
|
|
98
|
+
}, children: innerText }), textAfter ? (0, jsx_runtime_1.jsx)(itwinui_react_1.Text, { children: textAfter }) : null] })),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=TreeNodeRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeNodeRenderer.js","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/itwinui/TreeNodeRenderer.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 \"./TreeNodeRenderer.css\";\nimport cx from \"classnames\";\nimport { ComponentPropsWithoutRef, ReactElement } from \"react\";\nimport { SvgFilter, SvgFilterHollow, SvgRemove } from \"@itwin/itwinui-icons-react\";\nimport { Anchor, ButtonGroup, Flex, IconButton, ProgressRadial, Text, TreeNode } from \"@itwin/itwinui-react\";\nimport { MAX_LIMIT_OVERRIDE } from \"../internal/Utils\";\nimport { isPresentationHierarchyNode, PresentationHierarchyNode } from \"../TreeNode\";\nimport { useTree } from \"../UseTree\";\nimport { useLocalizationContext } from \"./LocalizationContext\";\nimport { RenderedTreeNode } from \"./TreeRenderer\";\n\ntype TreeNodeProps = ComponentPropsWithoutRef<typeof TreeNode>;\n\ninterface TreeNodeRendererOwnProps {\n node: RenderedTreeNode;\n onFilterClick?: (nodeId: string | undefined) => void;\n getIcon?: (node: PresentationHierarchyNode) => ReactElement | undefined;\n getSublabel?: (node: PresentationHierarchyNode) => ReactElement | undefined;\n onNodeClick?: (nodeId: string, isSelected: boolean, event: React.MouseEvent<HTMLElement, MouseEvent>) => void;\n onNodeKeyDown?: (nodeId: string, isSelected: boolean, event: React.KeyboardEvent<HTMLElement>) => void;\n actionButtonsClassName?: string;\n}\n\ntype TreeNodeRendererProps = Pick<ReturnType<typeof useTree>, \"expandNode\"> &\n Partial<Pick<ReturnType<typeof useTree>, \"getHierarchyLevelDetails\">> &\n Omit<TreeNodeProps, \"label\" | \"onExpanded\" | \"onSelected\" | \"icon\"> &\n TreeNodeRendererOwnProps;\n\n/**\n * A component that renders `RenderedTreeNode` using the `TreeNode` component from `@itwin/itwinui-react`.\n *\n * @see `TreeRenderer`\n * @see https://itwinui.bentley.com/docs/tree\n * @beta\n */\nexport function TreeNodeRenderer({\n node,\n expandNode,\n getIcon,\n getSublabel,\n onFilterClick,\n onNodeClick,\n onNodeKeyDown,\n isSelected,\n isDisabled,\n actionButtonsClassName,\n getHierarchyLevelDetails,\n ...nodeProps\n}: TreeNodeRendererProps) {\n const { localizedStrings } = useLocalizationContext();\n if (\"type\" in node && node.type === \"ChildrenPlaceholder\") {\n return <PlaceholderNode {...nodeProps} />;\n }\n\n if (isPresentationHierarchyNode(node)) {\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions\n <div\n onClick={(event) => !isDisabled && onNodeClick?.(node.id, !isSelected, event)}\n onKeyDown={(event) => {\n // Ignore if it is called on the element inside, e.g. checkbox or expander\n if (!isDisabled && event.target instanceof HTMLElement && event.target.classList.contains(\"stateless-tree-node\")) {\n onNodeKeyDown?.(node.id, !isSelected, event);\n }\n }}\n >\n <TreeNode\n {...nodeProps}\n isSelected={isSelected}\n isDisabled={isDisabled}\n className={cx(nodeProps.className, \"stateless-tree-node\", { filtered: node.isFiltered })}\n label={node.label}\n onExpanded={(_, isExpanded) => {\n expandNode(node.id, isExpanded);\n }}\n icon={getIcon ? getIcon(node) : undefined}\n sublabel={getSublabel ? getSublabel(node) : undefined}\n >\n <ButtonGroup className={cx(\"action-buttons\", actionButtonsClassName)}>\n {getHierarchyLevelDetails && node.isFiltered ? (\n <IconButton\n className=\"filtering-action-button\"\n styleType=\"borderless\"\n size=\"small\"\n title={localizedStrings.clearHierarchyLevelFilter}\n onClick={(e) => {\n e.stopPropagation();\n getHierarchyLevelDetails(node.id)?.setInstanceFilter(undefined);\n }}\n >\n <SvgRemove />\n </IconButton>\n ) : null}\n {onFilterClick && node.isFilterable ? (\n <IconButton\n className=\"filtering-action-button\"\n styleType=\"borderless\"\n size=\"small\"\n title={localizedStrings.filterHierarchyLevel}\n onClick={(e) => {\n e.stopPropagation();\n onFilterClick(node.id);\n }}\n >\n {node.isFiltered ? <SvgFilter /> : <SvgFilterHollow />}\n </IconButton>\n ) : null}\n </ButtonGroup>\n </TreeNode>\n </div>\n );\n }\n\n if (node.type === \"ResultSetTooLarge\") {\n return (\n <ResultSetTooLargeNode\n {...nodeProps}\n limit={node.resultSetSizeLimit}\n onOverrideLimit={getHierarchyLevelDetails ? (limit) => getHierarchyLevelDetails(node.parentNodeId)?.setSizeLimit(limit) : undefined}\n onFilterClick={\n onFilterClick\n ? () => {\n onFilterClick(node.parentNodeId);\n }\n : undefined\n }\n />\n );\n }\n\n if (node.type === \"NoFilterMatches\") {\n return <TreeNode {...nodeProps} label={localizedStrings.noFilteredChildren} isDisabled={true} onExpanded={/* istanbul ignore next */ () => {}} />;\n }\n\n return <TreeNode {...nodeProps} label={node.message} isDisabled={true} onExpanded={/* istanbul ignore next */ () => {}} />;\n}\n\nfunction PlaceholderNode(props: Omit<TreeNodeProps, \"onExpanded\" | \"label\">) {\n const { localizedStrings } = useLocalizationContext();\n return (\n <TreeNode\n {...props}\n label={localizedStrings.loading}\n icon={<ProgressRadial size=\"x-small\" indeterminate title={localizedStrings.loading} />}\n onExpanded={/* istanbul ignore next */ () => {}}\n ></TreeNode>\n );\n}\n\nfunction ResultSetTooLargeNode({\n onFilterClick,\n onOverrideLimit,\n limit,\n ...props\n}: Omit<TreeNodeProps, \"onExpanded\" | \"label\"> & ResultSetTooLargeNodeLabelProps) {\n return (\n <TreeNode\n {...props}\n className=\"stateless-tree-node\"\n label={<ResultSetTooLargeNodeLabel limit={limit} onFilterClick={onFilterClick} onOverrideLimit={onOverrideLimit} />}\n onExpanded={/* istanbul ignore next */ () => {}}\n />\n );\n}\n\ninterface ResultSetTooLargeNodeLabelProps {\n limit: number;\n onFilterClick?: () => void;\n onOverrideLimit?: (limit: number) => void;\n}\n\nfunction ResultSetTooLargeNodeLabel({ onFilterClick, onOverrideLimit, limit }: ResultSetTooLargeNodeLabelProps) {\n const { localizedStrings } = useLocalizationContext();\n const supportsFiltering = !!onFilterClick;\n const supportsLimitOverride = !!onOverrideLimit && limit < MAX_LIMIT_OVERRIDE;\n\n const limitExceededMessage = createLocalizedMessage(\n supportsFiltering ? localizedStrings.resultLimitExceededWithFiltering : localizedStrings.resultLimitExceeded,\n limit,\n onFilterClick,\n );\n const increaseLimitMessage = supportsLimitOverride\n ? createLocalizedMessage(\n supportsFiltering ? localizedStrings.increaseHierarchyLimitWithFiltering : localizedStrings.increaseHierarchyLimit,\n MAX_LIMIT_OVERRIDE,\n () => onOverrideLimit(MAX_LIMIT_OVERRIDE),\n )\n : { title: \"\", element: null };\n\n const title = `${limitExceededMessage.title} ${increaseLimitMessage.title}`;\n\n return (\n <Flex flexDirection=\"column\" gap=\"3xs\" title={title} alignItems=\"start\">\n {limitExceededMessage.element}\n {increaseLimitMessage.element}\n </Flex>\n );\n}\n\nfunction createLocalizedMessage(message: string, limit: number, onClick?: () => void) {\n const limitStr = limit.toLocaleString(undefined, { useGrouping: true });\n const messageWithLimit = message.replace(\"{{limit}}\", limitStr);\n const exp = new RegExp(\"<link>(.*)</link>\");\n const match = messageWithLimit.match(exp);\n\n if (!match) {\n return {\n title: messageWithLimit,\n element: (\n <Flex flexDirection=\"row\" gap=\"3xs\">\n <Text>{messageWithLimit}</Text>\n </Flex>\n ),\n };\n }\n\n const [fullText, innerText] = match;\n const [textBefore, textAfter] = messageWithLimit.split(fullText);\n\n return {\n title: messageWithLimit.replace(fullText, innerText),\n element: (\n <Flex flexDirection=\"row\" gap=\"3xs\">\n {textBefore ? <Text>{textBefore}</Text> : null}\n <Anchor\n underline\n onClick={(e) => {\n e.stopPropagation();\n onClick?.();\n }}\n >\n {innerText}\n </Anchor>\n {textAfter ? <Text>{textAfter}</Text> : null}\n </Flex>\n ),\n };\n}\n"]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef } from "react";
|
|
2
|
+
import { NodeData, Tree } from "@itwin/itwinui-react";
|
|
3
|
+
import { PresentationTreeNode } from "../TreeNode";
|
|
4
|
+
import { SelectionMode } from "../UseSelectionHandler";
|
|
5
|
+
import { useTree } from "../UseTree";
|
|
6
|
+
import { LocalizedStrings } from "./LocalizationContext";
|
|
7
|
+
import { TreeNodeRenderer } from "./TreeNodeRenderer";
|
|
8
|
+
type TreeProps = ComponentPropsWithoutRef<typeof Tree<RenderedTreeNode>>;
|
|
9
|
+
type TreeNodeRendererProps = ComponentPropsWithoutRef<typeof TreeNodeRenderer>;
|
|
10
|
+
interface TreeRendererOwnProps {
|
|
11
|
+
rootNodes: PresentationTreeNode[];
|
|
12
|
+
selectionMode?: SelectionMode;
|
|
13
|
+
localizedStrings?: Partial<LocalizedStrings>;
|
|
14
|
+
}
|
|
15
|
+
type TreeRendererProps = Pick<ReturnType<typeof useTree>, "rootNodes" | "expandNode"> & Partial<Pick<ReturnType<typeof useTree>, "selectNodes" | "isNodeSelected" | "getHierarchyLevelDetails">> & Pick<TreeNodeRendererProps, "onFilterClick" | "getIcon" | "getSublabel"> & TreeRendererOwnProps & Omit<TreeProps, "data" | "nodeRenderer" | "getNode" | "enableVirtualization">;
|
|
16
|
+
/**
|
|
17
|
+
* A component that renders a tree using the `Tree` component from `@itwin/itwinui-react`. The tree nodes
|
|
18
|
+
* are rendered using `TreeNodeRenderer` component from this package.
|
|
19
|
+
*
|
|
20
|
+
* @see https://itwinui.bentley.com/docs/tree
|
|
21
|
+
* @beta
|
|
22
|
+
*/
|
|
23
|
+
export declare function TreeRenderer({ rootNodes, expandNode, selectNodes, isNodeSelected, onFilterClick, getIcon, getSublabel, getHierarchyLevelDetails, selectionMode, localizedStrings, ...treeProps }: TreeRendererProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
/**
|
|
25
|
+
* A data structure for a tree node that is rendered using the `TreeRenderer` component.
|
|
26
|
+
*
|
|
27
|
+
* In addition to the `PresentationTreeNode` union, this type may have one additional variation - an informational
|
|
28
|
+
* type of node with `ChildrenPlaceholder` type. This type of node is returned as the single child node of a parent
|
|
29
|
+
* while its children are being loaded. This allows the node renderer to show a placeholder under the parent during
|
|
30
|
+
* the process.
|
|
31
|
+
*
|
|
32
|
+
* @beta
|
|
33
|
+
*/
|
|
34
|
+
export type RenderedTreeNode = PresentationTreeNode | {
|
|
35
|
+
id: string;
|
|
36
|
+
parentNodeId: string | undefined;
|
|
37
|
+
type: "ChildrenPlaceholder";
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* An utility function that creates an `@itwin/itwinui-react` `NodeData` object for the `Tree` component from a
|
|
41
|
+
* `RenderedTreeNode` object.
|
|
42
|
+
*
|
|
43
|
+
* Usage example:
|
|
44
|
+
* ```tsx
|
|
45
|
+
* function MyComponent({ rootNodes, nodeRenderer }: MyComponentProps) {
|
|
46
|
+
* const getNode = useCallback<TreeProps["getNode"]>((node) => createRenderedTreeNodeData(node, () => false), []);
|
|
47
|
+
* return <Tree<RenderedTreeNode> data={rootNodes} getNode={getNode} nodeRenderer={nodeRenderer} />;
|
|
48
|
+
* }
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* @beta
|
|
52
|
+
*/
|
|
53
|
+
export declare function createRenderedTreeNodeData(node: RenderedTreeNode, isNodeSelected: (nodeId: string) => boolean): NodeData<RenderedTreeNode>;
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=TreeRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeRenderer.d.ts","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/itwinui/TreeRenderer.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,wBAAwB,EAAe,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,aAAa,EAAuB,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAA+B,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,KAAK,SAAS,GAAG,wBAAwB,CAAC,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACzE,KAAK,qBAAqB,GAAG,wBAAwB,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/E,UAAU,oBAAoB;IAC5B,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC9C;AAED,KAAK,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,OAAO,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC,GACnF,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,OAAO,CAAC,EAAE,aAAa,GAAG,gBAAgB,GAAG,0BAA0B,CAAC,CAAC,GACxG,IAAI,CAAC,qBAAqB,EAAE,eAAe,GAAG,SAAS,GAAG,aAAa,CAAC,GACxE,oBAAoB,GACpB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,GAAG,sBAAsB,CAAC,CAAC;AAEhF;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,UAAU,EACV,WAAW,EACX,cAAc,EACd,aAAa,EACb,OAAO,EACP,WAAW,EACX,wBAAwB,EACxB,aAAa,EACb,gBAAgB,EAChB,GAAG,SAAS,EACb,EAAE,iBAAiB,2CA+BnB;AAOD;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,GACxB,oBAAoB,GACpB;IACE,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,IAAI,EAAE,qBAAqB,CAAC;CAC7B,CAAC;AAEN;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CA6B1I"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createRenderedTreeNodeData = exports.TreeRenderer = 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
|
+
const react_1 = require("react");
|
|
10
|
+
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
11
|
+
const UseSelectionHandler_1 = require("../UseSelectionHandler");
|
|
12
|
+
const LocalizationContext_1 = require("./LocalizationContext");
|
|
13
|
+
const TreeNodeRenderer_1 = require("./TreeNodeRenderer");
|
|
14
|
+
/**
|
|
15
|
+
* A component that renders a tree using the `Tree` component from `@itwin/itwinui-react`. The tree nodes
|
|
16
|
+
* are rendered using `TreeNodeRenderer` component from this package.
|
|
17
|
+
*
|
|
18
|
+
* @see https://itwinui.bentley.com/docs/tree
|
|
19
|
+
* @beta
|
|
20
|
+
*/
|
|
21
|
+
function TreeRenderer({ rootNodes, expandNode, selectNodes, isNodeSelected, onFilterClick, getIcon, getSublabel, getHierarchyLevelDetails, selectionMode, localizedStrings, ...treeProps }) {
|
|
22
|
+
const { onNodeClick, onNodeKeyDown } = (0, UseSelectionHandler_1.useSelectionHandler)({
|
|
23
|
+
rootNodes,
|
|
24
|
+
selectNodes: selectNodes ?? noopSelectNodes,
|
|
25
|
+
selectionMode: selectionMode ?? "single",
|
|
26
|
+
});
|
|
27
|
+
const nodeRenderer = (0, react_1.useCallback)((nodeProps) => {
|
|
28
|
+
return ((0, jsx_runtime_1.jsx)(TreeNodeRenderer_1.TreeNodeRenderer, { ...nodeProps, expandNode: expandNode, getHierarchyLevelDetails: getHierarchyLevelDetails, onFilterClick: onFilterClick, onNodeClick: onNodeClick, onNodeKeyDown: onNodeKeyDown, getIcon: getIcon, getSublabel: getSublabel }));
|
|
29
|
+
}, [expandNode, getHierarchyLevelDetails, onFilterClick, onNodeClick, onNodeKeyDown, getIcon, getSublabel]);
|
|
30
|
+
const getNode = (0, react_1.useCallback)((node) => createRenderedTreeNodeData(node, isNodeSelected ?? noopIsNodeSelected), [isNodeSelected]);
|
|
31
|
+
return ((0, jsx_runtime_1.jsx)(LocalizationContext_1.LocalizationContextProvider, { localizedStrings: localizedStrings, children: (0, jsx_runtime_1.jsx)(itwinui_react_1.Tree, { ...treeProps, data: rootNodes, nodeRenderer: nodeRenderer, getNode: getNode, enableVirtualization: true }) }));
|
|
32
|
+
}
|
|
33
|
+
exports.TreeRenderer = TreeRenderer;
|
|
34
|
+
function noopSelectNodes() { }
|
|
35
|
+
function noopIsNodeSelected() {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* An utility function that creates an `@itwin/itwinui-react` `NodeData` object for the `Tree` component from a
|
|
40
|
+
* `RenderedTreeNode` object.
|
|
41
|
+
*
|
|
42
|
+
* Usage example:
|
|
43
|
+
* ```tsx
|
|
44
|
+
* function MyComponent({ rootNodes, nodeRenderer }: MyComponentProps) {
|
|
45
|
+
* const getNode = useCallback<TreeProps["getNode"]>((node) => createRenderedTreeNodeData(node, () => false), []);
|
|
46
|
+
* return <Tree<RenderedTreeNode> data={rootNodes} getNode={getNode} nodeRenderer={nodeRenderer} />;
|
|
47
|
+
* }
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* @beta
|
|
51
|
+
*/
|
|
52
|
+
function createRenderedTreeNodeData(node, isNodeSelected) {
|
|
53
|
+
if ("type" in node) {
|
|
54
|
+
return {
|
|
55
|
+
nodeId: node.id,
|
|
56
|
+
node,
|
|
57
|
+
hasSubNodes: false,
|
|
58
|
+
isExpanded: false,
|
|
59
|
+
isSelected: false,
|
|
60
|
+
isDisabled: true,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
nodeId: node.id,
|
|
65
|
+
node,
|
|
66
|
+
hasSubNodes: node.children === true || node.children.length > 0,
|
|
67
|
+
subNodes:
|
|
68
|
+
// returns placeholder node to show as child while children is loading.
|
|
69
|
+
node.children === true
|
|
70
|
+
? [
|
|
71
|
+
{
|
|
72
|
+
id: `Loading-${node.id}`,
|
|
73
|
+
parentNodeId: node.id,
|
|
74
|
+
type: "ChildrenPlaceholder",
|
|
75
|
+
},
|
|
76
|
+
]
|
|
77
|
+
: node.children,
|
|
78
|
+
isExpanded: node.isExpanded,
|
|
79
|
+
isSelected: isNodeSelected(node.id),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
exports.createRenderedTreeNodeData = createRenderedTreeNodeData;
|
|
83
|
+
//# sourceMappingURL=TreeRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeRenderer.js","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/itwinui/TreeRenderer.tsx"],"names":[],"mappings":";;;;AAAA;;;gGAGgG;AAEhG,iCAA8D;AAC9D,wDAAsD;AAEtD,gEAA4E;AAE5E,+DAAsF;AACtF,yDAAsD;AAiBtD;;;;;;GAMG;AACH,SAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,UAAU,EACV,WAAW,EACX,cAAc,EACd,aAAa,EACb,OAAO,EACP,WAAW,EACX,wBAAwB,EACxB,aAAa,EACb,gBAAgB,EAChB,GAAG,SAAS,EACM;IAClB,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,IAAA,yCAAmB,EAAC;QACzD,SAAS;QACT,WAAW,EAAE,WAAW,IAAI,eAAe;QAC3C,aAAa,EAAE,aAAa,IAAI,QAAQ;KACzC,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,IAAA,mBAAW,EAC9B,CAAC,SAAS,EAAE,EAAE;QACZ,OAAO,CACL,uBAAC,mCAAgB,OACX,SAAS,EACb,UAAU,EAAE,UAAU,EACtB,wBAAwB,EAAE,wBAAwB,EAClD,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,GACxB,CACH,CAAC;IACJ,CAAC,EACD,CAAC,UAAU,EAAE,wBAAwB,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC,CACxG,CAAC;IAEF,MAAM,OAAO,GAAG,IAAA,mBAAW,EAAuB,CAAC,IAAI,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,EAAE,cAAc,IAAI,kBAAkB,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAEtJ,OAAO,CACL,uBAAC,iDAA2B,IAAC,gBAAgB,EAAE,gBAAgB,YAC7D,uBAAC,oBAAI,OAAuB,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,GAAI,GACxG,CAC/B,CAAC;AACJ,CAAC;AA3CD,oCA2CC;AAED,SAAS,eAAe,KAAI,CAAC;AAC7B,SAAS,kBAAkB;IACzB,OAAO,KAAK,CAAC;AACf,CAAC;AAoBD;;;;;;;;;;;;;GAaG;AACH,SAAgB,0BAA0B,CAAC,IAAsB,EAAE,cAA2C;IAC5G,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,IAAI;YACJ,WAAW,EAAE,KAAK;YAClB,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,IAAI;SACjB,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,IAAI;QACJ,WAAW,EAAE,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QAC/D,QAAQ;QACN,uEAAuE;QACvE,IAAI,CAAC,QAAQ,KAAK,IAAI;YACpB,CAAC,CAAC;gBACE;oBACE,EAAE,EAAE,WAAW,IAAI,CAAC,EAAE,EAAE;oBACxB,YAAY,EAAE,IAAI,CAAC,EAAE;oBACrB,IAAI,EAAE,qBAAqB;iBAC5B;aACF;YACH,CAAC,CAAC,IAAI,CAAC,QAAQ;QACnB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,UAAU,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;KACpC,CAAC;AACJ,CAAC;AA7BD,gEA6BC","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 { ComponentPropsWithoutRef, useCallback } from \"react\";\nimport { NodeData, Tree } from \"@itwin/itwinui-react\";\nimport { PresentationTreeNode } from \"../TreeNode\";\nimport { SelectionMode, useSelectionHandler } from \"../UseSelectionHandler\";\nimport { useTree } from \"../UseTree\";\nimport { LocalizationContextProvider, LocalizedStrings } from \"./LocalizationContext\";\nimport { TreeNodeRenderer } from \"./TreeNodeRenderer\";\n\ntype TreeProps = ComponentPropsWithoutRef<typeof Tree<RenderedTreeNode>>;\ntype TreeNodeRendererProps = ComponentPropsWithoutRef<typeof TreeNodeRenderer>;\n\ninterface TreeRendererOwnProps {\n rootNodes: PresentationTreeNode[];\n selectionMode?: SelectionMode;\n localizedStrings?: Partial<LocalizedStrings>;\n}\n\ntype TreeRendererProps = Pick<ReturnType<typeof useTree>, \"rootNodes\" | \"expandNode\"> &\n Partial<Pick<ReturnType<typeof useTree>, \"selectNodes\" | \"isNodeSelected\" | \"getHierarchyLevelDetails\">> &\n Pick<TreeNodeRendererProps, \"onFilterClick\" | \"getIcon\" | \"getSublabel\"> &\n TreeRendererOwnProps &\n Omit<TreeProps, \"data\" | \"nodeRenderer\" | \"getNode\" | \"enableVirtualization\">;\n\n/**\n * A component that renders a tree using the `Tree` component from `@itwin/itwinui-react`. The tree nodes\n * are rendered using `TreeNodeRenderer` component from this package.\n *\n * @see https://itwinui.bentley.com/docs/tree\n * @beta\n */\nexport function TreeRenderer({\n rootNodes,\n expandNode,\n selectNodes,\n isNodeSelected,\n onFilterClick,\n getIcon,\n getSublabel,\n getHierarchyLevelDetails,\n selectionMode,\n localizedStrings,\n ...treeProps\n}: TreeRendererProps) {\n const { onNodeClick, onNodeKeyDown } = useSelectionHandler({\n rootNodes,\n selectNodes: selectNodes ?? noopSelectNodes,\n selectionMode: selectionMode ?? \"single\",\n });\n const nodeRenderer = useCallback<TreeProps[\"nodeRenderer\"]>(\n (nodeProps) => {\n return (\n <TreeNodeRenderer\n {...nodeProps}\n expandNode={expandNode}\n getHierarchyLevelDetails={getHierarchyLevelDetails}\n onFilterClick={onFilterClick}\n onNodeClick={onNodeClick}\n onNodeKeyDown={onNodeKeyDown}\n getIcon={getIcon}\n getSublabel={getSublabel}\n />\n );\n },\n [expandNode, getHierarchyLevelDetails, onFilterClick, onNodeClick, onNodeKeyDown, getIcon, getSublabel],\n );\n\n const getNode = useCallback<TreeProps[\"getNode\"]>((node) => createRenderedTreeNodeData(node, isNodeSelected ?? noopIsNodeSelected), [isNodeSelected]);\n\n return (\n <LocalizationContextProvider localizedStrings={localizedStrings}>\n <Tree<RenderedTreeNode> {...treeProps} data={rootNodes} nodeRenderer={nodeRenderer} getNode={getNode} enableVirtualization={true} />\n </LocalizationContextProvider>\n );\n}\n\nfunction noopSelectNodes() {}\nfunction noopIsNodeSelected() {\n return false;\n}\n\n/**\n * A data structure for a tree node that is rendered using the `TreeRenderer` component.\n *\n * In addition to the `PresentationTreeNode` union, this type may have one additional variation - an informational\n * type of node with `ChildrenPlaceholder` type. This type of node is returned as the single child node of a parent\n * while its children are being loaded. This allows the node renderer to show a placeholder under the parent during\n * the process.\n *\n * @beta\n */\nexport type RenderedTreeNode =\n | PresentationTreeNode\n | {\n id: string;\n parentNodeId: string | undefined;\n type: \"ChildrenPlaceholder\";\n };\n\n/**\n * An utility function that creates an `@itwin/itwinui-react` `NodeData` object for the `Tree` component from a\n * `RenderedTreeNode` object.\n *\n * Usage example:\n * ```tsx\n * function MyComponent({ rootNodes, nodeRenderer }: MyComponentProps) {\n * const getNode = useCallback<TreeProps[\"getNode\"]>((node) => createRenderedTreeNodeData(node, () => false), []);\n * return <Tree<RenderedTreeNode> data={rootNodes} getNode={getNode} nodeRenderer={nodeRenderer} />;\n * }\n * ```\n *\n * @beta\n */\nexport function createRenderedTreeNodeData(node: RenderedTreeNode, isNodeSelected: (nodeId: string) => boolean): NodeData<RenderedTreeNode> {\n if (\"type\" in node) {\n return {\n nodeId: node.id,\n node,\n hasSubNodes: false,\n isExpanded: false,\n isSelected: false,\n isDisabled: true,\n };\n }\n return {\n nodeId: node.id,\n node,\n hasSubNodes: node.children === true || node.children.length > 0,\n subNodes:\n // returns placeholder node to show as child while children is loading.\n node.children === true\n ? [\n {\n id: `Loading-${node.id}`,\n parentNodeId: node.id,\n type: \"ChildrenPlaceholder\",\n },\n ]\n : node.children,\n isExpanded: node.isExpanded,\n isSelected: isNodeSelected(node.id),\n };\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { PresentationGenericInfoNode, PresentationHierarchyNode, PresentationInfoNode, PresentationResultSetTooLargeInfoNode, PresentationTreeNode, isPresentationHierarchyNode, } from "./presentation-hierarchies-react/TreeNode";
|
|
2
|
+
export { UnifiedSelectionProvider } from "./presentation-hierarchies-react/UnifiedSelectionContext";
|
|
3
|
+
export { useSelectionHandler } from "./presentation-hierarchies-react/UseSelectionHandler";
|
|
4
|
+
export { HierarchyLevelDetails, useTree, useUnifiedSelectionTree } from "./presentation-hierarchies-react/UseTree";
|
|
5
|
+
export { TreeNodeRenderer } from "./presentation-hierarchies-react/itwinui/TreeNodeRenderer";
|
|
6
|
+
export { RenderedTreeNode, TreeRenderer, createRenderedTreeNodeData } from "./presentation-hierarchies-react/itwinui/TreeRenderer";
|
|
7
|
+
export { LocalizationContextProvider } from "./presentation-hierarchies-react/itwinui/LocalizationContext";
|
|
8
|
+
export { GenericInstanceFilter, HierarchyNode, HierarchyProvider } from "@itwin/presentation-hierarchies";
|
|
9
|
+
export { SelectionStorage } from "@itwin/unified-selection";
|
|
10
|
+
//# sourceMappingURL=presentation-hierarchies-react.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation-hierarchies-react.d.ts","sourceRoot":"","sources":["../../src/presentation-hierarchies-react.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,oBAAoB,EACpB,qCAAqC,EACrC,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0DAA0D,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,MAAM,sDAAsD,CAAC;AAC3F,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnH,OAAO,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,0BAA0B,EAAE,MAAM,uDAAuD,CAAC;AACnI,OAAO,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAE3G,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAC1G,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.HierarchyNode = exports.GenericInstanceFilter = exports.LocalizationContextProvider = exports.createRenderedTreeNodeData = exports.TreeRenderer = exports.TreeNodeRenderer = exports.useUnifiedSelectionTree = exports.useTree = exports.useSelectionHandler = exports.UnifiedSelectionProvider = exports.isPresentationHierarchyNode = void 0;
|
|
8
|
+
var TreeNode_1 = require("./presentation-hierarchies-react/TreeNode");
|
|
9
|
+
Object.defineProperty(exports, "isPresentationHierarchyNode", { enumerable: true, get: function () { return TreeNode_1.isPresentationHierarchyNode; } });
|
|
10
|
+
var UnifiedSelectionContext_1 = require("./presentation-hierarchies-react/UnifiedSelectionContext");
|
|
11
|
+
Object.defineProperty(exports, "UnifiedSelectionProvider", { enumerable: true, get: function () { return UnifiedSelectionContext_1.UnifiedSelectionProvider; } });
|
|
12
|
+
var UseSelectionHandler_1 = require("./presentation-hierarchies-react/UseSelectionHandler");
|
|
13
|
+
Object.defineProperty(exports, "useSelectionHandler", { enumerable: true, get: function () { return UseSelectionHandler_1.useSelectionHandler; } });
|
|
14
|
+
var UseTree_1 = require("./presentation-hierarchies-react/UseTree");
|
|
15
|
+
Object.defineProperty(exports, "useTree", { enumerable: true, get: function () { return UseTree_1.useTree; } });
|
|
16
|
+
Object.defineProperty(exports, "useUnifiedSelectionTree", { enumerable: true, get: function () { return UseTree_1.useUnifiedSelectionTree; } });
|
|
17
|
+
var TreeNodeRenderer_1 = require("./presentation-hierarchies-react/itwinui/TreeNodeRenderer");
|
|
18
|
+
Object.defineProperty(exports, "TreeNodeRenderer", { enumerable: true, get: function () { return TreeNodeRenderer_1.TreeNodeRenderer; } });
|
|
19
|
+
var TreeRenderer_1 = require("./presentation-hierarchies-react/itwinui/TreeRenderer");
|
|
20
|
+
Object.defineProperty(exports, "TreeRenderer", { enumerable: true, get: function () { return TreeRenderer_1.TreeRenderer; } });
|
|
21
|
+
Object.defineProperty(exports, "createRenderedTreeNodeData", { enumerable: true, get: function () { return TreeRenderer_1.createRenderedTreeNodeData; } });
|
|
22
|
+
var LocalizationContext_1 = require("./presentation-hierarchies-react/itwinui/LocalizationContext");
|
|
23
|
+
Object.defineProperty(exports, "LocalizationContextProvider", { enumerable: true, get: function () { return LocalizationContext_1.LocalizationContextProvider; } });
|
|
24
|
+
var presentation_hierarchies_1 = require("@itwin/presentation-hierarchies");
|
|
25
|
+
Object.defineProperty(exports, "GenericInstanceFilter", { enumerable: true, get: function () { return presentation_hierarchies_1.GenericInstanceFilter; } });
|
|
26
|
+
Object.defineProperty(exports, "HierarchyNode", { enumerable: true, get: function () { return presentation_hierarchies_1.HierarchyNode; } });
|
|
27
|
+
//# sourceMappingURL=presentation-hierarchies-react.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation-hierarchies-react.js","sourceRoot":"","sources":["../../src/presentation-hierarchies-react.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG,sEAOmD;AADjD,uHAAA,2BAA2B,OAAA;AAE7B,oGAAoG;AAA3F,mIAAA,wBAAwB,OAAA;AACjC,4FAA2F;AAAlF,0HAAA,mBAAmB,OAAA;AAC5B,oEAAmH;AAAnF,kGAAA,OAAO,OAAA;AAAE,kHAAA,uBAAuB,OAAA;AAChE,8FAA6F;AAApF,oHAAA,gBAAgB,OAAA;AACzB,sFAAmI;AAAxG,4GAAA,YAAY,OAAA;AAAE,0HAAA,0BAA0B,OAAA;AACnE,oGAA2G;AAAlG,kIAAA,2BAA2B,OAAA;AAEpC,4EAA0G;AAAjG,iIAAA,qBAAqB,OAAA;AAAE,yHAAA,aAAa,OAAA","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\nexport {\n PresentationGenericInfoNode,\n PresentationHierarchyNode,\n PresentationInfoNode,\n PresentationResultSetTooLargeInfoNode,\n PresentationTreeNode,\n isPresentationHierarchyNode,\n} from \"./presentation-hierarchies-react/TreeNode\";\nexport { UnifiedSelectionProvider } from \"./presentation-hierarchies-react/UnifiedSelectionContext\";\nexport { useSelectionHandler } from \"./presentation-hierarchies-react/UseSelectionHandler\";\nexport { HierarchyLevelDetails, useTree, useUnifiedSelectionTree } from \"./presentation-hierarchies-react/UseTree\";\nexport { TreeNodeRenderer } from \"./presentation-hierarchies-react/itwinui/TreeNodeRenderer\";\nexport { RenderedTreeNode, TreeRenderer, createRenderedTreeNodeData } from \"./presentation-hierarchies-react/itwinui/TreeRenderer\";\nexport { LocalizationContextProvider } from \"./presentation-hierarchies-react/itwinui/LocalizationContext\";\n\nexport { GenericInstanceFilter, HierarchyNode, HierarchyProvider } from \"@itwin/presentation-hierarchies\";\nexport { SelectionStorage } from \"@itwin/unified-selection\";\n"]}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { HierarchyNode } from "@itwin/presentation-hierarchies";
|
|
2
|
+
/**
|
|
3
|
+
* A type that defines an actual expandable node in a UI tree component, built with `useTree` hook.
|
|
4
|
+
* @beta
|
|
5
|
+
*/
|
|
6
|
+
export interface PresentationHierarchyNode {
|
|
7
|
+
id: string;
|
|
8
|
+
label: string;
|
|
9
|
+
children: true | Array<PresentationTreeNode>;
|
|
10
|
+
isExpanded: boolean;
|
|
11
|
+
isLoading: boolean;
|
|
12
|
+
isFilterable: boolean;
|
|
13
|
+
isFiltered: boolean;
|
|
14
|
+
/** UI-agnostic source of this node object. */
|
|
15
|
+
nodeData: HierarchyNode;
|
|
16
|
+
/** Additional data that may be assigned to this node. */
|
|
17
|
+
extendedData?: {
|
|
18
|
+
[key: string]: any;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A type of `PresentationInfoNode` that is returned as the single child of a filtered parent node,
|
|
23
|
+
* when none of the child nodes match the filter.
|
|
24
|
+
*
|
|
25
|
+
* @beta
|
|
26
|
+
*/
|
|
27
|
+
export interface PresentationNoFilterMatchesInfoNode {
|
|
28
|
+
id: string;
|
|
29
|
+
parentNodeId: string | undefined;
|
|
30
|
+
type: "NoFilterMatches";
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* A type of `PresentationInfoNode` that is returned as the single child of a parent node, when the
|
|
34
|
+
* number of child nodes exceeds the limit set on the tree nodes loader. The limit is also included
|
|
35
|
+
* on this node as `resultSetSizeLimit` attribute.
|
|
36
|
+
*
|
|
37
|
+
* @beta
|
|
38
|
+
*/
|
|
39
|
+
export interface PresentationResultSetTooLargeInfoNode {
|
|
40
|
+
id: string;
|
|
41
|
+
parentNodeId: string | undefined;
|
|
42
|
+
type: "ResultSetTooLarge";
|
|
43
|
+
resultSetSizeLimit: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* A type of `PresentationInfoNode` that contains a user-friendly message to be displayed in the UI.
|
|
47
|
+
* Generally, this is the only child of a parent node, created in cases like an error loading children. The
|
|
48
|
+
* renderer may offer users to re-load the children or the whole component in such cases.
|
|
49
|
+
*
|
|
50
|
+
* @beta
|
|
51
|
+
*/
|
|
52
|
+
export interface PresentationGenericInfoNode {
|
|
53
|
+
id: string;
|
|
54
|
+
parentNodeId: string | undefined;
|
|
55
|
+
type: "Unknown";
|
|
56
|
+
message: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* A type that defines a non-expandable, non-selectable informational node in a UI tree component, built
|
|
60
|
+
* with `useTree` hook.
|
|
61
|
+
*
|
|
62
|
+
* @beta
|
|
63
|
+
*/
|
|
64
|
+
export type PresentationInfoNode = PresentationGenericInfoNode | PresentationResultSetTooLargeInfoNode | PresentationNoFilterMatchesInfoNode;
|
|
65
|
+
/**
|
|
66
|
+
* A type that defines a node in a UI tree component, built with `useTree` hook.
|
|
67
|
+
* @beta
|
|
68
|
+
*/
|
|
69
|
+
export type PresentationTreeNode = PresentationHierarchyNode | PresentationInfoNode;
|
|
70
|
+
/**
|
|
71
|
+
* An utility function to check if a node is a `PresentationHierarchyNode`.
|
|
72
|
+
* @beta
|
|
73
|
+
*/
|
|
74
|
+
export declare function isPresentationHierarchyNode(node: PresentationTreeNode): node is PresentationHierarchyNode;
|
|
75
|
+
//# sourceMappingURL=TreeNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeNode.d.ts","sourceRoot":"","sources":["../../../src/presentation-hierarchies-react/TreeNode.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,IAAI,GAAG,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC7C,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,8CAA8C;IAC9C,QAAQ,EAAE,aAAa,CAAC;IACxB,yDAAyD;IACzD,YAAY,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;CACvC;AAED;;;;;GAKG;AACH,MAAM,WAAW,mCAAmC;IAClD,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qCAAqC;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG,2BAA2B,GAAG,qCAAqC,GAAG,mCAAmC,CAAC;AAE7I;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,yBAAyB,GAAG,oBAAoB,CAAC;AAEpF;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,IAAI,yBAAyB,CAEzG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
+
* An utility function to check if a node is a `PresentationHierarchyNode`.
|
|
7
|
+
* @beta
|
|
8
|
+
*/
|
|
9
|
+
export function isPresentationHierarchyNode(node) {
|
|
10
|
+
return "children" in node;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=TreeNode.js.map
|