@itwin/presentation-hierarchies-react 1.6.0 → 2.0.0-alpha.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 +6 -0
- package/README.md +1 -21
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeActionButtons.d.ts +14 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeActionButtons.d.ts.map +1 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeActionButtons.js +27 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeActionButtons.js.map +1 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeErrorRenderer.d.ts +12 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeErrorRenderer.d.ts.map +1 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeErrorRenderer.js +72 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeErrorRenderer.js.map +1 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeLevelRenderer.d.ts +12 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeLevelRenderer.d.ts.map +1 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeLevelRenderer.js +10 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeLevelRenderer.js.map +1 -0
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeNodeRenderer.d.ts +14 -28
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeNodeRenderer.d.ts.map +1 -1
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeNodeRenderer.js +21 -84
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeNodeRenderer.js.map +1 -1
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeRenderer.d.ts +10 -40
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeRenderer.d.ts.map +1 -1
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeRenderer.js +5 -73
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeRenderer.js.map +1 -1
- package/lib/esm/presentation-hierarchies-react.d.ts +3 -1
- package/lib/esm/presentation-hierarchies-react.d.ts.map +1 -1
- package/lib/esm/presentation-hierarchies-react.js +3 -1
- package/lib/esm/presentation-hierarchies-react.js.map +1 -1
- package/package.json +10 -14
- package/lib/cjs/package.json +0 -1
- package/lib/cjs/presentation-hierarchies-react/TreeNode.d.ts +0 -75
- package/lib/cjs/presentation-hierarchies-react/TreeNode.d.ts.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/TreeNode.js +0 -15
- package/lib/cjs/presentation-hierarchies-react/TreeNode.js.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/UnifiedSelectionContext.d.ts +0 -15
- package/lib/cjs/presentation-hierarchies-react/UnifiedSelectionContext.d.ts.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/UnifiedSelectionContext.js +0 -26
- package/lib/cjs/presentation-hierarchies-react/UnifiedSelectionContext.js.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/UseIModelTree.d.ts +0 -55
- package/lib/cjs/presentation-hierarchies-react/UseIModelTree.d.ts.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/UseIModelTree.js +0 -66
- package/lib/cjs/presentation-hierarchies-react/UseIModelTree.js.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/UseSelectionHandler.d.ts +0 -46
- package/lib/cjs/presentation-hierarchies-react/UseSelectionHandler.d.ts.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/UseSelectionHandler.js +0 -101
- package/lib/cjs/presentation-hierarchies-react/UseSelectionHandler.js.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/UseTree.d.ts +0 -132
- package/lib/cjs/presentation-hierarchies-react/UseTree.d.ts.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/UseTree.js +0 -246
- package/lib/cjs/presentation-hierarchies-react/UseTree.js.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/internal/DisposePolyfill.d.ts +0 -1
- package/lib/cjs/presentation-hierarchies-react/internal/DisposePolyfill.d.ts.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/internal/DisposePolyfill.js +0 -11
- package/lib/cjs/presentation-hierarchies-react/internal/DisposePolyfill.js.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/internal/TreeActions.d.ts +0 -53
- package/lib/cjs/presentation-hierarchies-react/internal/TreeActions.d.ts.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/internal/TreeActions.js +0 -311
- package/lib/cjs/presentation-hierarchies-react/internal/TreeActions.js.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/internal/TreeLoader.d.ts +0 -44
- package/lib/cjs/presentation-hierarchies-react/internal/TreeLoader.d.ts.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/internal/TreeLoader.js +0 -98
- package/lib/cjs/presentation-hierarchies-react/internal/TreeLoader.js.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/internal/TreeModel.d.ts +0 -70
- package/lib/cjs/presentation-hierarchies-react/internal/TreeModel.d.ts.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/internal/TreeModel.js +0 -158
- package/lib/cjs/presentation-hierarchies-react/internal/TreeModel.js.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts +0 -28
- package/lib/cjs/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/internal/UseUnifiedSelection.js +0 -131
- package/lib/cjs/presentation-hierarchies-react/internal/UseUnifiedSelection.js.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/internal/Utils.d.ts +0 -23
- package/lib/cjs/presentation-hierarchies-react/internal/Utils.d.ts.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/internal/Utils.js +0 -64
- package/lib/cjs/presentation-hierarchies-react/internal/Utils.js.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/itwinui/LocalizationContext.d.ts +0 -73
- package/lib/cjs/presentation-hierarchies-react/itwinui/LocalizationContext.d.ts.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/itwinui/LocalizationContext.js +0 -38
- package/lib/cjs/presentation-hierarchies-react/itwinui/LocalizationContext.js.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/itwinui/TreeNodeRenderer.css +0 -29
- package/lib/cjs/presentation-hierarchies-react/itwinui/TreeNodeRenderer.d.ts +0 -56
- package/lib/cjs/presentation-hierarchies-react/itwinui/TreeNodeRenderer.d.ts.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/itwinui/TreeNodeRenderer.js +0 -126
- package/lib/cjs/presentation-hierarchies-react/itwinui/TreeNodeRenderer.js.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/itwinui/TreeRenderer.d.ts +0 -60
- package/lib/cjs/presentation-hierarchies-react/itwinui/TreeRenderer.d.ts.map +0 -1
- package/lib/cjs/presentation-hierarchies-react/itwinui/TreeRenderer.js +0 -94
- package/lib/cjs/presentation-hierarchies-react/itwinui/TreeRenderer.js.map +0 -1
- package/lib/cjs/presentation-hierarchies-react.d.ts +0 -11
- package/lib/cjs/presentation-hierarchies-react.d.ts.map +0 -1
- package/lib/cjs/presentation-hierarchies-react.js +0 -30
- package/lib/cjs/presentation-hierarchies-react.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/itwinui/TreeNodeRenderer.css +0 -29
|
@@ -1,98 +0,0 @@
|
|
|
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.TreeLoader = void 0;
|
|
8
|
-
const rxjs_1 = require("rxjs");
|
|
9
|
-
const TreeModel_js_1 = require("./TreeModel.js");
|
|
10
|
-
const Utils_js_1 = require("./Utils.js");
|
|
11
|
-
/** @internal */
|
|
12
|
-
class TreeLoader {
|
|
13
|
-
_hierarchyProvider;
|
|
14
|
-
_onHierarchyLimitExceeded;
|
|
15
|
-
_onHierarchyLoadError;
|
|
16
|
-
_treeNodeIdFactory;
|
|
17
|
-
constructor(_hierarchyProvider, _onHierarchyLimitExceeded, _onHierarchyLoadError, treeNodeIdFactory) {
|
|
18
|
-
this._hierarchyProvider = _hierarchyProvider;
|
|
19
|
-
this._onHierarchyLimitExceeded = _onHierarchyLimitExceeded;
|
|
20
|
-
this._onHierarchyLoadError = _onHierarchyLoadError;
|
|
21
|
-
this._treeNodeIdFactory = treeNodeIdFactory ?? /* c8 ignore next */ Utils_js_1.createNodeId;
|
|
22
|
-
}
|
|
23
|
-
loadChildren({ parent, getHierarchyLevelOptions, buildNode, ignoreCache }) {
|
|
24
|
-
const { instanceFilter, hierarchyLevelSizeLimit } = getHierarchyLevelOptions(parent);
|
|
25
|
-
const infoNodeIdBase = `${parent.id ?? "<root>"}`;
|
|
26
|
-
const treeModelNodesFactory = createTreeModelNodesFactory({ buildNode, treeNodeIdFactory: this._treeNodeIdFactory });
|
|
27
|
-
return (0, rxjs_1.from)(this._hierarchyProvider.getNodes({
|
|
28
|
-
parentNode: parent.nodeData,
|
|
29
|
-
hierarchyLevelSizeLimit,
|
|
30
|
-
instanceFilter,
|
|
31
|
-
ignoreCache,
|
|
32
|
-
})).pipe((0, rxjs_1.toArray)(), (0, rxjs_1.catchError)((err) => {
|
|
33
|
-
const nodeProps = {
|
|
34
|
-
id: `${infoNodeIdBase}-Unknown`,
|
|
35
|
-
parentId: parent.id,
|
|
36
|
-
};
|
|
37
|
-
let hierarchyLoadErrorType = "unknown";
|
|
38
|
-
if (err instanceof Error) {
|
|
39
|
-
nodeProps.id = `${infoNodeIdBase}-${err.message}`;
|
|
40
|
-
if (isRowsLimitError(err)) {
|
|
41
|
-
this._onHierarchyLimitExceeded({ parentId: parent.id, filter: instanceFilter, limit: err.limit });
|
|
42
|
-
return (0, rxjs_1.of)([{ ...nodeProps, type: "ResultSetTooLarge", resultSetSizeLimit: err.limit }]);
|
|
43
|
-
}
|
|
44
|
-
if (isTimeoutError(err)) {
|
|
45
|
-
hierarchyLoadErrorType = "timeout";
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
this._onHierarchyLoadError({ parentId: parent.id, type: hierarchyLoadErrorType, error: err });
|
|
49
|
-
return (0, rxjs_1.of)([
|
|
50
|
-
{
|
|
51
|
-
...nodeProps,
|
|
52
|
-
type: "Unknown",
|
|
53
|
-
message: "Failed to create hierarchy level",
|
|
54
|
-
},
|
|
55
|
-
]);
|
|
56
|
-
}), (0, rxjs_1.map)((childNodes) => ({
|
|
57
|
-
parentId: parent.id,
|
|
58
|
-
loadedNodes: instanceFilter && childNodes.length === 0
|
|
59
|
-
? [
|
|
60
|
-
{
|
|
61
|
-
id: `${infoNodeIdBase}-no-filter-matches`,
|
|
62
|
-
parentId: parent.id,
|
|
63
|
-
type: "NoFilterMatches",
|
|
64
|
-
},
|
|
65
|
-
]
|
|
66
|
-
: childNodes.map(treeModelNodesFactory),
|
|
67
|
-
})));
|
|
68
|
-
}
|
|
69
|
-
loadNodes({ shouldLoadChildren, ...options }) {
|
|
70
|
-
return this.loadChildren(options).pipe((0, rxjs_1.expand)((loadedPart) => (0, rxjs_1.from)(loadedPart.loadedNodes.filter((node) => (0, TreeModel_js_1.isTreeModelHierarchyNode)(node) && shouldLoadChildren(node))).pipe((0, rxjs_1.mergeMap)((node) => this.loadChildren({ ...options, parent: node })))));
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
exports.TreeLoader = TreeLoader;
|
|
74
|
-
function createTreeModelNodesFactory({ buildNode, treeNodeIdFactory, }) {
|
|
75
|
-
return (node) => {
|
|
76
|
-
if (!isHierarchyNode(node)) {
|
|
77
|
-
return node;
|
|
78
|
-
}
|
|
79
|
-
const modelNode = {
|
|
80
|
-
id: treeNodeIdFactory(node),
|
|
81
|
-
children: node.children,
|
|
82
|
-
label: node.label,
|
|
83
|
-
nodeData: node,
|
|
84
|
-
};
|
|
85
|
-
return buildNode ? buildNode(modelNode) : modelNode;
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
function isHierarchyNode(node) {
|
|
89
|
-
return "key" in node && node.key !== undefined;
|
|
90
|
-
}
|
|
91
|
-
function isRowsLimitError(error) {
|
|
92
|
-
const asRowsError = error;
|
|
93
|
-
return asRowsError.limit !== undefined && asRowsError.message.includes("Query rows limit of");
|
|
94
|
-
}
|
|
95
|
-
function isTimeoutError(error) {
|
|
96
|
-
return error.message.includes("query too long to execute or server is too busy");
|
|
97
|
-
}
|
|
98
|
-
//# sourceMappingURL=TreeLoader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeLoader.js","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/internal/TreeLoader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { catchError, expand, from, map, mergeMap, Observable, of, toArray } from \"rxjs\";\nimport { GenericInstanceFilter, HierarchyNode, HierarchyProvider, RowsLimitExceededError } from \"@itwin/presentation-hierarchies\";\nimport { isTreeModelHierarchyNode, TreeModelHierarchyNode, TreeModelInfoNode, TreeModelNode, TreeModelRootNode } from \"./TreeModel.js\";\nimport { createNodeId } from \"./Utils.js\";\n\n/** @internal */\nexport interface LoadedTreePart {\n parentId: string | undefined;\n loadedNodes: TreeModelNode[];\n}\n\n/** @internal */\nexport interface HierarchyLevelOptions {\n instanceFilter?: GenericInstanceFilter;\n hierarchyLevelSizeLimit?: number | \"unbounded\";\n}\n\n/** @internal */\nexport interface LoadNodesOptions {\n parent: TreeModelHierarchyNode | TreeModelRootNode;\n getHierarchyLevelOptions: (node: TreeModelRootNode | TreeModelHierarchyNode) => HierarchyLevelOptions;\n shouldLoadChildren: (node: TreeModelHierarchyNode) => boolean;\n buildNode?: (node: TreeModelHierarchyNode) => TreeModelHierarchyNode;\n ignoreCache?: boolean;\n}\n\n/** @internal */\nexport interface ITreeLoader {\n loadNodes(options: LoadNodesOptions): Observable<LoadedTreePart>;\n}\n\n/** @internal */\nexport class TreeLoader implements ITreeLoader {\n private _treeNodeIdFactory: (node: Pick<HierarchyNode, \"key\" | \"parentKeys\">) => string;\n\n constructor(\n private _hierarchyProvider: HierarchyProvider,\n private _onHierarchyLimitExceeded: (props: { parentId?: string; filter?: GenericInstanceFilter; limit?: number | \"unbounded\" }) => void,\n private _onHierarchyLoadError: (props: { parentId?: string; type: \"timeout\" | \"unknown\"; error: unknown }) => void,\n treeNodeIdFactory?: (node: Pick<HierarchyNode, \"key\" | \"parentKeys\">) => string,\n ) {\n this._treeNodeIdFactory = treeNodeIdFactory ?? /* c8 ignore next */ createNodeId;\n }\n\n private loadChildren({ parent, getHierarchyLevelOptions, buildNode, ignoreCache }: Omit<LoadNodesOptions, \"shouldLoadChildren\">) {\n const { instanceFilter, hierarchyLevelSizeLimit } = getHierarchyLevelOptions(parent);\n const infoNodeIdBase = `${parent.id ?? \"<root>\"}`;\n const treeModelNodesFactory = createTreeModelNodesFactory({ buildNode, treeNodeIdFactory: this._treeNodeIdFactory });\n return from(\n this._hierarchyProvider.getNodes({\n parentNode: parent.nodeData,\n hierarchyLevelSizeLimit,\n instanceFilter,\n ignoreCache,\n }),\n ).pipe(\n toArray(),\n catchError((err) => {\n const nodeProps = {\n id: `${infoNodeIdBase}-Unknown`,\n parentId: parent.id,\n };\n let hierarchyLoadErrorType: \"unknown\" | \"timeout\" = \"unknown\";\n if (err instanceof Error) {\n nodeProps.id = `${infoNodeIdBase}-${err.message}`;\n if (isRowsLimitError(err)) {\n this._onHierarchyLimitExceeded({ parentId: parent.id, filter: instanceFilter, limit: err.limit });\n return of([{ ...nodeProps, type: \"ResultSetTooLarge\" as const, resultSetSizeLimit: err.limit }]);\n }\n if (isTimeoutError(err)) {\n hierarchyLoadErrorType = \"timeout\";\n }\n }\n\n this._onHierarchyLoadError({ parentId: parent.id, type: hierarchyLoadErrorType, error: err });\n return of([\n {\n ...nodeProps,\n type: \"Unknown\" as const,\n message: \"Failed to create hierarchy level\",\n },\n ]);\n }),\n map(\n (childNodes): LoadedTreePart => ({\n parentId: parent.id,\n loadedNodes:\n instanceFilter && childNodes.length === 0\n ? [\n {\n id: `${infoNodeIdBase}-no-filter-matches`,\n parentId: parent.id,\n type: \"NoFilterMatches\" as const,\n },\n ]\n : childNodes.map(treeModelNodesFactory),\n }),\n ),\n );\n }\n\n public loadNodes({ shouldLoadChildren, ...options }: LoadNodesOptions) {\n return this.loadChildren(options).pipe(\n expand((loadedPart) =>\n from(loadedPart.loadedNodes.filter((node): node is TreeModelHierarchyNode => isTreeModelHierarchyNode(node) && shouldLoadChildren(node))).pipe(\n mergeMap((node) => this.loadChildren({ ...options, parent: node })),\n ),\n ),\n );\n }\n}\n\nfunction createTreeModelNodesFactory({\n buildNode,\n treeNodeIdFactory,\n}: {\n buildNode?: (node: TreeModelHierarchyNode) => TreeModelHierarchyNode;\n treeNodeIdFactory: (node: Pick<HierarchyNode, \"key\" | \"parentKeys\">) => string;\n}): (node: TreeModelInfoNode | HierarchyNode) => TreeModelNode {\n return (node: TreeModelInfoNode | HierarchyNode) => {\n if (!isHierarchyNode(node)) {\n return node;\n }\n\n const modelNode: TreeModelHierarchyNode = {\n id: treeNodeIdFactory(node),\n children: node.children,\n label: node.label,\n nodeData: node,\n };\n return buildNode ? buildNode(modelNode) : modelNode;\n };\n}\n\nfunction isHierarchyNode(node: TreeModelInfoNode | HierarchyNode): node is HierarchyNode {\n return \"key\" in node && node.key !== undefined;\n}\n\nfunction isRowsLimitError(error: Error): error is RowsLimitExceededError {\n const asRowsError = error as RowsLimitExceededError;\n return asRowsError.limit !== undefined && asRowsError.message.includes(\"Query rows limit of\");\n}\n\nfunction isTimeoutError(error: Error) {\n return error.message.includes(\"query too long to execute or server is too busy\");\n}\n"]}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { GenericInstanceFilter, HierarchyNode } from "@itwin/presentation-hierarchies";
|
|
2
|
-
import { SelectionChangeType } from "../UseSelectionHandler.js";
|
|
3
|
-
/** @internal */
|
|
4
|
-
export interface TreeModelRootNode {
|
|
5
|
-
id: undefined;
|
|
6
|
-
nodeData: undefined;
|
|
7
|
-
hierarchyLimit?: number | "unbounded";
|
|
8
|
-
instanceFilter?: GenericInstanceFilter;
|
|
9
|
-
isLoading?: boolean;
|
|
10
|
-
}
|
|
11
|
-
/** @internal */
|
|
12
|
-
export interface TreeModelHierarchyNode {
|
|
13
|
-
id: string;
|
|
14
|
-
nodeData: HierarchyNode;
|
|
15
|
-
label: string;
|
|
16
|
-
children: boolean;
|
|
17
|
-
isLoading?: boolean;
|
|
18
|
-
isExpanded?: boolean;
|
|
19
|
-
isSelected?: boolean;
|
|
20
|
-
hierarchyLimit?: number | "unbounded";
|
|
21
|
-
instanceFilter?: GenericInstanceFilter;
|
|
22
|
-
}
|
|
23
|
-
/** @internal */
|
|
24
|
-
export interface TreeModelGenericInfoNode {
|
|
25
|
-
id: string;
|
|
26
|
-
parentId: string | undefined;
|
|
27
|
-
type: "Unknown";
|
|
28
|
-
message: string;
|
|
29
|
-
}
|
|
30
|
-
/** @internal */
|
|
31
|
-
export interface TreeModelNoFilterMatchesInfoNode {
|
|
32
|
-
id: string;
|
|
33
|
-
parentId: string | undefined;
|
|
34
|
-
type: "NoFilterMatches";
|
|
35
|
-
}
|
|
36
|
-
/** @internal */
|
|
37
|
-
export interface TreeModelResultSetTooLargeInfoNode {
|
|
38
|
-
id: string;
|
|
39
|
-
parentId: string | undefined;
|
|
40
|
-
type: "ResultSetTooLarge";
|
|
41
|
-
resultSetSizeLimit: number;
|
|
42
|
-
}
|
|
43
|
-
/** @internal */
|
|
44
|
-
export type TreeModelInfoNode = TreeModelGenericInfoNode | TreeModelResultSetTooLargeInfoNode | TreeModelNoFilterMatchesInfoNode;
|
|
45
|
-
/** @internal */
|
|
46
|
-
export type TreeModelNode = TreeModelHierarchyNode | TreeModelInfoNode;
|
|
47
|
-
/** @internal */
|
|
48
|
-
export declare function isTreeModelHierarchyNode(node: TreeModelHierarchyNode | TreeModelInfoNode | TreeModelRootNode): node is TreeModelHierarchyNode;
|
|
49
|
-
/** @internal */
|
|
50
|
-
export declare function isTreeModelInfoNode(node: TreeModelHierarchyNode | TreeModelInfoNode | TreeModelRootNode): node is TreeModelInfoNode;
|
|
51
|
-
/** @internal */
|
|
52
|
-
export interface TreeModel {
|
|
53
|
-
parentChildMap: Map<string | undefined, string[]>;
|
|
54
|
-
idToNode: Map<string, TreeModelNode>;
|
|
55
|
-
rootNode: TreeModelRootNode;
|
|
56
|
-
}
|
|
57
|
-
/** @internal */
|
|
58
|
-
export declare namespace TreeModel {
|
|
59
|
-
function expandNode(model: TreeModel, nodeId: string, isExpanded: boolean): "none" | "loadChildren" | "reloadChildren";
|
|
60
|
-
/** @internal */
|
|
61
|
-
function addHierarchyPart(model: TreeModel, rootId: string | undefined, hierarchyPart: TreeModel): void;
|
|
62
|
-
function removeSubTree(model: TreeModel, parentId: string | undefined): void;
|
|
63
|
-
function setHierarchyLimit(model: TreeModel, nodeId: string | undefined, limit?: number | "unbounded"): boolean;
|
|
64
|
-
function setInstanceFilter(model: TreeModel, nodeId: string | undefined, filter?: GenericInstanceFilter): boolean;
|
|
65
|
-
function selectNodes(model: TreeModel, nodeIds: Array<string>, changeType: SelectionChangeType): void;
|
|
66
|
-
function isNodeSelected(model: TreeModel, nodeId: string): boolean;
|
|
67
|
-
function getNode(model: TreeModel, nodeId: string | undefined): TreeModelNode | TreeModelRootNode | undefined;
|
|
68
|
-
function setIsLoading(model: TreeModel, nodeId: string | undefined, isLoading: boolean): void;
|
|
69
|
-
}
|
|
70
|
-
//# sourceMappingURL=TreeModel.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeModel.d.ts","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/internal/TreeModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,158 +0,0 @@
|
|
|
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.TreeModel = void 0;
|
|
8
|
-
exports.isTreeModelHierarchyNode = isTreeModelHierarchyNode;
|
|
9
|
-
exports.isTreeModelInfoNode = isTreeModelInfoNode;
|
|
10
|
-
/** @internal */
|
|
11
|
-
function isTreeModelHierarchyNode(node) {
|
|
12
|
-
return "nodeData" in node && node.nodeData !== undefined;
|
|
13
|
-
}
|
|
14
|
-
/** @internal */
|
|
15
|
-
function isTreeModelInfoNode(node) {
|
|
16
|
-
return "type" in node && node.type !== undefined;
|
|
17
|
-
}
|
|
18
|
-
/** @internal */
|
|
19
|
-
var TreeModel;
|
|
20
|
-
(function (TreeModel) {
|
|
21
|
-
function expandNode(model, nodeId, isExpanded) {
|
|
22
|
-
const node = model.idToNode.get(nodeId);
|
|
23
|
-
if (!node || !isTreeModelHierarchyNode(node)) {
|
|
24
|
-
return "none";
|
|
25
|
-
}
|
|
26
|
-
node.isExpanded = isExpanded;
|
|
27
|
-
if (!isExpanded || !node.children) {
|
|
28
|
-
return "none";
|
|
29
|
-
}
|
|
30
|
-
const children = model.parentChildMap.get(node.id);
|
|
31
|
-
if (!children) {
|
|
32
|
-
node.isLoading = true;
|
|
33
|
-
return "loadChildren";
|
|
34
|
-
}
|
|
35
|
-
if (children.length !== 1) {
|
|
36
|
-
return "none";
|
|
37
|
-
}
|
|
38
|
-
const firstChild = TreeModel.getNode(model, children[0]);
|
|
39
|
-
if (!firstChild || !isTreeModelInfoNode(firstChild) || firstChild.type !== "Unknown") {
|
|
40
|
-
return "none";
|
|
41
|
-
}
|
|
42
|
-
// remove subtree if there is only one `Unknown` info node in order to attempt reloading children
|
|
43
|
-
TreeModel.removeSubTree(model, nodeId);
|
|
44
|
-
node.isLoading = true;
|
|
45
|
-
return "reloadChildren";
|
|
46
|
-
}
|
|
47
|
-
TreeModel.expandNode = expandNode;
|
|
48
|
-
/** @internal */
|
|
49
|
-
function addHierarchyPart(model, rootId, hierarchyPart) {
|
|
50
|
-
removeSubTree(model, rootId);
|
|
51
|
-
for (const [parentId, children] of hierarchyPart.parentChildMap) {
|
|
52
|
-
model.parentChildMap.set(parentId, children);
|
|
53
|
-
}
|
|
54
|
-
for (const [nodeId, node] of hierarchyPart.idToNode) {
|
|
55
|
-
model.idToNode.set(nodeId, node);
|
|
56
|
-
}
|
|
57
|
-
const parentNode = rootId !== undefined ? model.idToNode.get(rootId) : model.rootNode;
|
|
58
|
-
/* c8 ignore next 3*/
|
|
59
|
-
if (!parentNode || isTreeModelInfoNode(parentNode)) {
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
parentNode.isLoading = false;
|
|
63
|
-
}
|
|
64
|
-
TreeModel.addHierarchyPart = addHierarchyPart;
|
|
65
|
-
function removeSubTree(model, parentId) {
|
|
66
|
-
const currentChildren = model.parentChildMap.get(parentId);
|
|
67
|
-
if (!currentChildren) {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
model.parentChildMap.delete(parentId);
|
|
71
|
-
for (const childId of currentChildren) {
|
|
72
|
-
const childNode = model.idToNode.get(childId);
|
|
73
|
-
if (childNode && isTreeModelHierarchyNode(childNode)) {
|
|
74
|
-
removeSubTree(model, childNode.id);
|
|
75
|
-
}
|
|
76
|
-
model.idToNode.delete(childId);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
TreeModel.removeSubTree = removeSubTree;
|
|
80
|
-
function setHierarchyLimit(model, nodeId, limit) {
|
|
81
|
-
return updateForReload(model, nodeId, (node) => {
|
|
82
|
-
node.hierarchyLimit = limit;
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
TreeModel.setHierarchyLimit = setHierarchyLimit;
|
|
86
|
-
function setInstanceFilter(model, nodeId, filter) {
|
|
87
|
-
return updateForReload(model, nodeId, (node) => {
|
|
88
|
-
if (filter && isTreeModelHierarchyNode(node)) {
|
|
89
|
-
node.isExpanded = true;
|
|
90
|
-
}
|
|
91
|
-
node.instanceFilter = filter;
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
TreeModel.setInstanceFilter = setInstanceFilter;
|
|
95
|
-
function selectNodes(model, nodeIds, changeType) {
|
|
96
|
-
if (changeType === "replace") {
|
|
97
|
-
for (const [nodeId, node] of model.idToNode) {
|
|
98
|
-
if (!isTreeModelHierarchyNode(node)) {
|
|
99
|
-
continue;
|
|
100
|
-
}
|
|
101
|
-
node.isSelected = !!nodeIds.find((id) => id === nodeId);
|
|
102
|
-
}
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
for (const nodeId of nodeIds) {
|
|
106
|
-
const modelNode = model.idToNode.get(nodeId);
|
|
107
|
-
if (!modelNode || !isTreeModelHierarchyNode(modelNode)) {
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
modelNode.isSelected = changeType === "add";
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
TreeModel.selectNodes = selectNodes;
|
|
114
|
-
function isNodeSelected(model, nodeId) {
|
|
115
|
-
const currentNode = model.idToNode.get(nodeId);
|
|
116
|
-
return !!currentNode && isTreeModelHierarchyNode(currentNode) && !!currentNode.isSelected;
|
|
117
|
-
}
|
|
118
|
-
TreeModel.isNodeSelected = isNodeSelected;
|
|
119
|
-
function getNode(model, nodeId) {
|
|
120
|
-
if (!nodeId) {
|
|
121
|
-
return model.rootNode;
|
|
122
|
-
}
|
|
123
|
-
return model.idToNode.get(nodeId);
|
|
124
|
-
}
|
|
125
|
-
TreeModel.getNode = getNode;
|
|
126
|
-
function setIsLoading(model, nodeId, isLoading) {
|
|
127
|
-
if (nodeId === undefined) {
|
|
128
|
-
model.rootNode.isLoading = isLoading;
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
const modelNode = model.idToNode.get(nodeId);
|
|
132
|
-
/* c8 ignore next 3*/
|
|
133
|
-
if (!modelNode || !isTreeModelHierarchyNode(modelNode)) {
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
modelNode.isLoading = isLoading;
|
|
137
|
-
}
|
|
138
|
-
TreeModel.setIsLoading = setIsLoading;
|
|
139
|
-
})(TreeModel || (exports.TreeModel = TreeModel = {}));
|
|
140
|
-
function updateForReload(model, nodeId, update) {
|
|
141
|
-
TreeModel.removeSubTree(model, nodeId);
|
|
142
|
-
if (nodeId === undefined) {
|
|
143
|
-
update(model.rootNode);
|
|
144
|
-
model.rootNode.isLoading = true;
|
|
145
|
-
return true;
|
|
146
|
-
}
|
|
147
|
-
const modelNode = model.idToNode.get(nodeId);
|
|
148
|
-
if (!modelNode || !isTreeModelHierarchyNode(modelNode)) {
|
|
149
|
-
return false;
|
|
150
|
-
}
|
|
151
|
-
update(modelNode);
|
|
152
|
-
if (modelNode.isExpanded) {
|
|
153
|
-
modelNode.isLoading = true;
|
|
154
|
-
return true;
|
|
155
|
-
}
|
|
156
|
-
return false;
|
|
157
|
-
}
|
|
158
|
-
//# sourceMappingURL=TreeModel.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeModel.js","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/internal/TreeModel.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { GenericInstanceFilter, HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { SelectionChangeType } from \"../UseSelectionHandler.js\";\n\n/** @internal */\nexport interface TreeModelRootNode {\n id: undefined;\n nodeData: undefined;\n hierarchyLimit?: number | \"unbounded\";\n instanceFilter?: GenericInstanceFilter;\n isLoading?: boolean;\n}\n\n/** @internal */\nexport interface TreeModelHierarchyNode {\n id: string;\n nodeData: HierarchyNode;\n label: string;\n children: boolean;\n isLoading?: boolean;\n isExpanded?: boolean;\n isSelected?: boolean;\n hierarchyLimit?: number | \"unbounded\";\n instanceFilter?: GenericInstanceFilter;\n}\n\n/** @internal */\nexport interface TreeModelGenericInfoNode {\n id: string;\n parentId: string | undefined;\n type: \"Unknown\";\n message: string;\n}\n\n/** @internal */\nexport interface TreeModelNoFilterMatchesInfoNode {\n id: string;\n parentId: string | undefined;\n type: \"NoFilterMatches\";\n}\n\n/** @internal */\nexport interface TreeModelResultSetTooLargeInfoNode {\n id: string;\n parentId: string | undefined;\n type: \"ResultSetTooLarge\";\n resultSetSizeLimit: number;\n}\n\n/** @internal */\nexport type TreeModelInfoNode = TreeModelGenericInfoNode | TreeModelResultSetTooLargeInfoNode | TreeModelNoFilterMatchesInfoNode;\n\n/** @internal */\nexport type TreeModelNode = TreeModelHierarchyNode | TreeModelInfoNode;\n\n/** @internal */\nexport function isTreeModelHierarchyNode(node: TreeModelHierarchyNode | TreeModelInfoNode | TreeModelRootNode): node is TreeModelHierarchyNode {\n return \"nodeData\" in node && node.nodeData !== undefined;\n}\n\n/** @internal */\nexport function isTreeModelInfoNode(node: TreeModelHierarchyNode | TreeModelInfoNode | TreeModelRootNode): node is TreeModelInfoNode {\n return \"type\" in node && node.type !== undefined;\n}\n\n/** @internal */\nexport interface TreeModel {\n parentChildMap: Map<string | undefined, string[]>;\n idToNode: Map<string, TreeModelNode>;\n rootNode: TreeModelRootNode;\n}\n\n/** @internal */\nexport namespace TreeModel {\n export function expandNode(model: TreeModel, nodeId: string, isExpanded: boolean): \"none\" | \"loadChildren\" | \"reloadChildren\" {\n const node = model.idToNode.get(nodeId);\n if (!node || !isTreeModelHierarchyNode(node)) {\n return \"none\";\n }\n\n node.isExpanded = isExpanded;\n if (!isExpanded || !node.children) {\n return \"none\";\n }\n\n const children = model.parentChildMap.get(node.id);\n if (!children) {\n node.isLoading = true;\n return \"loadChildren\";\n }\n\n if (children.length !== 1) {\n return \"none\";\n }\n\n const firstChild = TreeModel.getNode(model, children[0]);\n if (!firstChild || !isTreeModelInfoNode(firstChild) || firstChild.type !== \"Unknown\") {\n return \"none\";\n }\n\n // remove subtree if there is only one `Unknown` info node in order to attempt reloading children\n TreeModel.removeSubTree(model, nodeId);\n node.isLoading = true;\n return \"reloadChildren\";\n }\n\n /** @internal */\n export function addHierarchyPart(model: TreeModel, rootId: string | undefined, hierarchyPart: TreeModel): void {\n removeSubTree(model, rootId);\n\n for (const [parentId, children] of hierarchyPart.parentChildMap) {\n model.parentChildMap.set(parentId, children);\n }\n\n for (const [nodeId, node] of hierarchyPart.idToNode) {\n model.idToNode.set(nodeId, node);\n }\n\n const parentNode = rootId !== undefined ? model.idToNode.get(rootId) : model.rootNode;\n /* c8 ignore next 3*/\n if (!parentNode || isTreeModelInfoNode(parentNode)) {\n return;\n }\n parentNode.isLoading = false;\n }\n\n export function removeSubTree(model: TreeModel, parentId: string | undefined): void {\n const currentChildren = model.parentChildMap.get(parentId);\n if (!currentChildren) {\n return;\n }\n model.parentChildMap.delete(parentId);\n\n for (const childId of currentChildren) {\n const childNode = model.idToNode.get(childId);\n if (childNode && isTreeModelHierarchyNode(childNode)) {\n removeSubTree(model, childNode.id);\n }\n model.idToNode.delete(childId);\n }\n }\n\n export function setHierarchyLimit(model: TreeModel, nodeId: string | undefined, limit?: number | \"unbounded\"): boolean {\n return updateForReload(model, nodeId, (node) => {\n node.hierarchyLimit = limit;\n });\n }\n\n export function setInstanceFilter(model: TreeModel, nodeId: string | undefined, filter?: GenericInstanceFilter): boolean {\n return updateForReload(model, nodeId, (node) => {\n if (filter && isTreeModelHierarchyNode(node)) {\n node.isExpanded = true;\n }\n node.instanceFilter = filter;\n });\n }\n\n export function selectNodes(model: TreeModel, nodeIds: Array<string>, changeType: SelectionChangeType) {\n if (changeType === \"replace\") {\n for (const [nodeId, node] of model.idToNode) {\n if (!isTreeModelHierarchyNode(node)) {\n continue;\n }\n node.isSelected = !!nodeIds.find((id) => id === nodeId);\n }\n return;\n }\n for (const nodeId of nodeIds) {\n const modelNode = model.idToNode.get(nodeId);\n if (!modelNode || !isTreeModelHierarchyNode(modelNode)) {\n return;\n }\n modelNode.isSelected = changeType === \"add\";\n }\n }\n\n export function isNodeSelected(model: TreeModel, nodeId: string): boolean {\n const currentNode = model.idToNode.get(nodeId);\n return !!currentNode && isTreeModelHierarchyNode(currentNode) && !!currentNode.isSelected;\n }\n\n export function getNode(model: TreeModel, nodeId: string | undefined): TreeModelNode | TreeModelRootNode | undefined {\n if (!nodeId) {\n return model.rootNode;\n }\n return model.idToNode.get(nodeId);\n }\n\n export function setIsLoading(model: TreeModel, nodeId: string | undefined, isLoading: boolean) {\n if (nodeId === undefined) {\n model.rootNode.isLoading = isLoading;\n return;\n }\n const modelNode = model.idToNode.get(nodeId);\n /* c8 ignore next 3*/\n if (!modelNode || !isTreeModelHierarchyNode(modelNode)) {\n return;\n }\n modelNode.isLoading = isLoading;\n }\n}\n\nfunction updateForReload(model: TreeModel, nodeId: string | undefined, update: (node: TreeModelHierarchyNode | TreeModelRootNode) => void) {\n TreeModel.removeSubTree(model, nodeId);\n if (nodeId === undefined) {\n update(model.rootNode);\n model.rootNode.isLoading = true;\n return true;\n }\n\n const modelNode = model.idToNode.get(nodeId);\n if (!modelNode || !isTreeModelHierarchyNode(modelNode)) {\n return false;\n }\n\n update(modelNode);\n if (modelNode.isExpanded) {\n modelNode.isLoading = true;\n return true;\n }\n return false;\n}\n"]}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { SelectionStorage } from "@itwin/unified-selection";
|
|
2
|
-
import { SelectionChangeType } from "../UseSelectionHandler.js";
|
|
3
|
-
import { TreeModelNode, TreeModelRootNode } from "./TreeModel.js";
|
|
4
|
-
/** @internal */
|
|
5
|
-
export interface TreeSelectionOptions {
|
|
6
|
-
isNodeSelected: (nodeId: string) => boolean;
|
|
7
|
-
selectNodes: (nodeIds: Array<string>, changeType: SelectionChangeType) => void;
|
|
8
|
-
}
|
|
9
|
-
/** @public */
|
|
10
|
-
export interface UseUnifiedTreeSelectionProps {
|
|
11
|
-
/**
|
|
12
|
-
* Identifier to distinguish this source of changes to the unified selection from another ones in the application.
|
|
13
|
-
*/
|
|
14
|
-
sourceName: string;
|
|
15
|
-
/**
|
|
16
|
-
* Unified selection storage to use for listening, getting and changing active selection.
|
|
17
|
-
*
|
|
18
|
-
* When not specified, the deprecated unified selection React context is used to access the
|
|
19
|
-
* selection storage (see `UnifiedSelectionProvider`). This prop will be made required in the
|
|
20
|
-
* next major release, where the deprecated context will also be removed.
|
|
21
|
-
*/
|
|
22
|
-
selectionStorage?: SelectionStorage;
|
|
23
|
-
}
|
|
24
|
-
/** @internal */
|
|
25
|
-
export declare function useUnifiedTreeSelection({ sourceName, selectionStorage, getTreeModelNode, }: UseUnifiedTreeSelectionProps & {
|
|
26
|
-
getTreeModelNode: (nodeId: string) => TreeModelNode | TreeModelRootNode | undefined;
|
|
27
|
-
}): TreeSelectionOptions;
|
|
28
|
-
//# sourceMappingURL=UseUnifiedSelection.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UseUnifiedSelection.d.ts","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/internal/UseUnifiedSelection.ts"],"names":[],"mappings":"AASA,OAAO,EAA2B,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAErF,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAoD,aAAa,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEpH,gBAAgB;AAChB,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,WAAW,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAChF;AAED,cAAc;AACd,MAAM,WAAW,4BAA4B;IAC3C;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,gBAAgB;AAChB,wBAAgB,uBAAuB,CAAC,EACtC,UAAU,EACV,gBAAgB,EAChB,gBAAgB,GACjB,EAAE,4BAA4B,GAAG;IAAE,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,GAAG,iBAAiB,GAAG,SAAS,CAAA;CAAE,GAAG,oBAAoB,CA6B/I"}
|
|
@@ -1,131 +0,0 @@
|
|
|
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.useUnifiedTreeSelection = useUnifiedTreeSelection;
|
|
8
|
-
const react_1 = require("react");
|
|
9
|
-
const core_bentley_1 = require("@itwin/core-bentley");
|
|
10
|
-
const presentation_hierarchies_1 = require("@itwin/presentation-hierarchies");
|
|
11
|
-
const unified_selection_1 = require("@itwin/unified-selection");
|
|
12
|
-
const UnifiedSelectionContext_js_1 = require("../UnifiedSelectionContext.js");
|
|
13
|
-
const TreeModel_js_1 = require("./TreeModel.js");
|
|
14
|
-
/** @internal */
|
|
15
|
-
function useUnifiedTreeSelection({ sourceName, selectionStorage, getTreeModelNode, }) {
|
|
16
|
-
const [options, setOptions] = (0, react_1.useState)(() => ({
|
|
17
|
-
isNodeSelected: /* c8 ignore next */ () => false,
|
|
18
|
-
selectNodes: /* c8 ignore next */ () => { },
|
|
19
|
-
}));
|
|
20
|
-
const deprecatedSelectionStorage = (0, UnifiedSelectionContext_js_1.useUnifiedSelectionStorage)();
|
|
21
|
-
selectionStorage ??= deprecatedSelectionStorage;
|
|
22
|
-
(0, react_1.useEffect)(() => {
|
|
23
|
-
if (!selectionStorage) {
|
|
24
|
-
// TODO: make selectionStorage prop required
|
|
25
|
-
setOptions({
|
|
26
|
-
isNodeSelected: () => false,
|
|
27
|
-
selectNodes: () => { },
|
|
28
|
-
});
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
setOptions(createOptions(sourceName, selectionStorage, getTreeModelNode));
|
|
32
|
-
return selectionStorage.selectionChangeEvent.addListener((args) => {
|
|
33
|
-
if (args.level > 0) {
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
setOptions(createOptions(sourceName, selectionStorage, getTreeModelNode));
|
|
37
|
-
});
|
|
38
|
-
}, [selectionStorage, getTreeModelNode, sourceName]);
|
|
39
|
-
return options;
|
|
40
|
-
}
|
|
41
|
-
function createOptions(source, storage, getNode) {
|
|
42
|
-
return {
|
|
43
|
-
isNodeSelected: (nodeId) => {
|
|
44
|
-
const node = getNode(nodeId);
|
|
45
|
-
if (!node || !(0, TreeModel_js_1.isTreeModelHierarchyNode)(node)) {
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
return Object.entries(groupNodeSelectablesByIModelKey(node)).some(([imodelKey, nodeSelectables]) => {
|
|
49
|
-
const storageSelectables = storage.getSelection({ imodelKey, level: 0 });
|
|
50
|
-
return unified_selection_1.Selectables.hasAny(storageSelectables, nodeSelectables);
|
|
51
|
-
});
|
|
52
|
-
},
|
|
53
|
-
selectNodes: (nodeIds, changeType) => {
|
|
54
|
-
const imodelSelectables = {};
|
|
55
|
-
for (const nodeId of nodeIds) {
|
|
56
|
-
const node = getNode(nodeId);
|
|
57
|
-
if (!node || !(0, TreeModel_js_1.isTreeModelHierarchyNode)(node)) {
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
Object.entries(groupNodeSelectablesByIModelKey(node)).forEach(([imodelKey, nodeSelectables]) => {
|
|
61
|
-
let selectablesList = imodelSelectables[imodelKey];
|
|
62
|
-
if (!selectablesList) {
|
|
63
|
-
selectablesList = [];
|
|
64
|
-
imodelSelectables[imodelKey] = selectablesList;
|
|
65
|
-
}
|
|
66
|
-
nodeSelectables.forEach((selectable) => selectablesList.push(selectable));
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
Object.entries(imodelSelectables).forEach(([imodelKey, selectables]) => {
|
|
70
|
-
const actionProps = { imodelKey, source, selectables, level: 0 };
|
|
71
|
-
switch (changeType) {
|
|
72
|
-
case "add":
|
|
73
|
-
storage.addToSelection(actionProps);
|
|
74
|
-
return;
|
|
75
|
-
case "remove":
|
|
76
|
-
storage.removeFromSelection(actionProps);
|
|
77
|
-
return;
|
|
78
|
-
case "replace":
|
|
79
|
-
storage.replaceSelection(actionProps);
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
},
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
function groupNodeSelectablesByIModelKey(modelNode) {
|
|
87
|
-
const hierarchyNode = modelNode.nodeData;
|
|
88
|
-
if (presentation_hierarchies_1.HierarchyNode.isInstancesNode(hierarchyNode)) {
|
|
89
|
-
return groupIModelInstanceKeys(hierarchyNode.key.instanceKeys);
|
|
90
|
-
}
|
|
91
|
-
if (presentation_hierarchies_1.HierarchyNode.isGroupingNode(hierarchyNode)) {
|
|
92
|
-
return Object.entries(groupIModelInstanceKeys(hierarchyNode.groupedInstanceKeys)).reduce((imodelSelectables, [imodelKey, instanceKeys]) => ({
|
|
93
|
-
...imodelSelectables,
|
|
94
|
-
[imodelKey]: [
|
|
95
|
-
{
|
|
96
|
-
identifier: modelNode.id,
|
|
97
|
-
data: hierarchyNode,
|
|
98
|
-
async *loadInstanceKeys() {
|
|
99
|
-
for (const key of instanceKeys) {
|
|
100
|
-
yield key;
|
|
101
|
-
}
|
|
102
|
-
},
|
|
103
|
-
},
|
|
104
|
-
],
|
|
105
|
-
}), {});
|
|
106
|
-
}
|
|
107
|
-
(0, core_bentley_1.assert)(presentation_hierarchies_1.HierarchyNode.isGeneric(hierarchyNode));
|
|
108
|
-
return {
|
|
109
|
-
// note: generic nodes aren't associated with an imodel
|
|
110
|
-
[""]: [
|
|
111
|
-
{
|
|
112
|
-
identifier: modelNode.id,
|
|
113
|
-
data: hierarchyNode,
|
|
114
|
-
async *loadInstanceKeys() { },
|
|
115
|
-
},
|
|
116
|
-
],
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
function groupIModelInstanceKeys(instanceKeys) {
|
|
120
|
-
return instanceKeys.reduce((imodelSelectables, key) => {
|
|
121
|
-
const imodelKey = key.imodelKey ?? "";
|
|
122
|
-
let selectablesList = imodelSelectables[imodelKey];
|
|
123
|
-
if (!selectablesList) {
|
|
124
|
-
selectablesList = [];
|
|
125
|
-
imodelSelectables[imodelKey] = selectablesList;
|
|
126
|
-
}
|
|
127
|
-
selectablesList.push(key);
|
|
128
|
-
return imodelSelectables;
|
|
129
|
-
}, {});
|
|
130
|
-
}
|
|
131
|
-
//# sourceMappingURL=UseUnifiedSelection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UseUnifiedSelection.js","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/internal/UseUnifiedSelection.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { useEffect, useState } from \"react\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { HierarchyNode, InstancesNodeKey } from \"@itwin/presentation-hierarchies\";\nimport { InstanceKey } from \"@itwin/presentation-shared\";\nimport { Selectable, Selectables, SelectionStorage } from \"@itwin/unified-selection\";\nimport { useUnifiedSelectionStorage } from \"../UnifiedSelectionContext.js\";\nimport { SelectionChangeType } from \"../UseSelectionHandler.js\";\nimport { isTreeModelHierarchyNode, TreeModelHierarchyNode, TreeModelNode, TreeModelRootNode } from \"./TreeModel.js\";\n\n/** @internal */\nexport interface TreeSelectionOptions {\n isNodeSelected: (nodeId: string) => boolean;\n selectNodes: (nodeIds: Array<string>, changeType: SelectionChangeType) => void;\n}\n\n/** @public */\nexport interface UseUnifiedTreeSelectionProps {\n /**\n * Identifier to distinguish this source of changes to the unified selection from another ones in the application.\n */\n sourceName: string;\n\n /**\n * Unified selection storage to use for listening, getting and changing active selection.\n *\n * When not specified, the deprecated unified selection React context is used to access the\n * selection storage (see `UnifiedSelectionProvider`). This prop will be made required in the\n * next major release, where the deprecated context will also be removed.\n */\n selectionStorage?: SelectionStorage;\n}\n\n/** @internal */\nexport function useUnifiedTreeSelection({\n sourceName,\n selectionStorage,\n getTreeModelNode,\n}: UseUnifiedTreeSelectionProps & { getTreeModelNode: (nodeId: string) => TreeModelNode | TreeModelRootNode | undefined }): TreeSelectionOptions {\n const [options, setOptions] = useState<TreeSelectionOptions>(() => ({\n isNodeSelected: /* c8 ignore next */ () => false,\n selectNodes: /* c8 ignore next */ () => {},\n }));\n\n const deprecatedSelectionStorage = useUnifiedSelectionStorage();\n selectionStorage ??= deprecatedSelectionStorage;\n\n useEffect(() => {\n if (!selectionStorage) {\n // TODO: make selectionStorage prop required\n setOptions({\n isNodeSelected: () => false,\n selectNodes: () => {},\n });\n return;\n }\n\n setOptions(createOptions(sourceName, selectionStorage, getTreeModelNode));\n return selectionStorage.selectionChangeEvent.addListener((args) => {\n if (args.level > 0) {\n return;\n }\n setOptions(createOptions(sourceName, selectionStorage, getTreeModelNode));\n });\n }, [selectionStorage, getTreeModelNode, sourceName]);\n\n return options;\n}\n\nfunction createOptions(\n source: string,\n storage: SelectionStorage,\n getNode: (nodeId: string) => TreeModelNode | TreeModelRootNode | undefined,\n): TreeSelectionOptions {\n return {\n isNodeSelected: (nodeId: string) => {\n const node = getNode(nodeId);\n if (!node || !isTreeModelHierarchyNode(node)) {\n return false;\n }\n return Object.entries(groupNodeSelectablesByIModelKey(node)).some(([imodelKey, nodeSelectables]) => {\n const storageSelectables = storage.getSelection({ imodelKey, level: 0 });\n return Selectables.hasAny(storageSelectables, nodeSelectables);\n });\n },\n\n selectNodes: (nodeIds: Array<string>, changeType: SelectionChangeType) => {\n const imodelSelectables: { [imodelKey: string]: Selectable[] } = {};\n for (const nodeId of nodeIds) {\n const node = getNode(nodeId);\n if (!node || !isTreeModelHierarchyNode(node)) {\n return;\n }\n Object.entries(groupNodeSelectablesByIModelKey(node)).forEach(([imodelKey, nodeSelectables]) => {\n let selectablesList = imodelSelectables[imodelKey];\n if (!selectablesList) {\n selectablesList = [];\n imodelSelectables[imodelKey] = selectablesList;\n }\n nodeSelectables.forEach((selectable) => selectablesList.push(selectable));\n });\n }\n Object.entries(imodelSelectables).forEach(([imodelKey, selectables]) => {\n const actionProps = { imodelKey, source, selectables, level: 0 };\n switch (changeType) {\n case \"add\":\n storage.addToSelection(actionProps);\n return;\n case \"remove\":\n storage.removeFromSelection(actionProps);\n return;\n case \"replace\":\n storage.replaceSelection(actionProps);\n return;\n }\n });\n },\n };\n}\n\nfunction groupNodeSelectablesByIModelKey(modelNode: TreeModelHierarchyNode): { [imodelKey: string]: Selectable[] } {\n const hierarchyNode = modelNode.nodeData;\n if (HierarchyNode.isInstancesNode(hierarchyNode)) {\n return groupIModelInstanceKeys(hierarchyNode.key.instanceKeys);\n }\n if (HierarchyNode.isGroupingNode(hierarchyNode)) {\n return Object.entries(groupIModelInstanceKeys(hierarchyNode.groupedInstanceKeys)).reduce(\n (imodelSelectables, [imodelKey, instanceKeys]) => ({\n ...imodelSelectables,\n [imodelKey]: [\n {\n identifier: modelNode.id,\n data: hierarchyNode,\n async *loadInstanceKeys() {\n for (const key of instanceKeys) {\n yield key;\n }\n },\n },\n ],\n }),\n {} as { [imodelKey: string]: Selectable[] },\n );\n }\n assert(HierarchyNode.isGeneric(hierarchyNode));\n return {\n // note: generic nodes aren't associated with an imodel\n [\"\"]: [\n {\n identifier: modelNode.id,\n data: hierarchyNode,\n async *loadInstanceKeys() {},\n },\n ],\n };\n}\n\nfunction groupIModelInstanceKeys(instanceKeys: InstancesNodeKey[\"instanceKeys\"]) {\n return instanceKeys.reduce(\n (imodelSelectables, key) => {\n const imodelKey = key.imodelKey ?? \"\";\n let selectablesList = imodelSelectables[imodelKey];\n if (!selectablesList) {\n selectablesList = [];\n imodelSelectables[imodelKey] = selectablesList;\n }\n selectablesList.push(key);\n return imodelSelectables;\n },\n {} as { [imodelKey: string]: InstanceKey[] },\n );\n}\n"]}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import "./DisposePolyfill.js";
|
|
2
|
-
import { HierarchyNode } from "@itwin/presentation-hierarchies";
|
|
3
|
-
/** @internal */
|
|
4
|
-
export declare function createNodeId(node: Pick<HierarchyNode, "key" | "parentKeys">): string;
|
|
5
|
-
/** @internal */
|
|
6
|
-
export declare function sameNodes(lhs: HierarchyNode, rhs: HierarchyNode): boolean;
|
|
7
|
-
/** @internal */
|
|
8
|
-
export declare const MAX_LIMIT_OVERRIDE = 10000;
|
|
9
|
-
/**
|
|
10
|
-
* A helper that disposes the given object, if it's disposable.
|
|
11
|
-
*
|
|
12
|
-
* The first option is to dispose using the deprecated `dispose` method if it exists on the object.
|
|
13
|
-
* If not, we use the new `Symbol.dispose` method. If that doesn't exist either, the object is
|
|
14
|
-
* considered as non-disposable and nothing is done with it.
|
|
15
|
-
*
|
|
16
|
-
* @internal
|
|
17
|
-
*/
|
|
18
|
-
export declare function safeDispose(disposable: {} | {
|
|
19
|
-
[Symbol.dispose]: () => void;
|
|
20
|
-
} | {
|
|
21
|
-
dispose: () => void;
|
|
22
|
-
}): void;
|
|
23
|
-
//# sourceMappingURL=Utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/internal/Utils.ts"],"names":[],"mappings":"AAKA,OAAO,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAoB,MAAM,iCAAiC,CAAC;AAElF,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,YAAY,CAAC,UAE3E;AAiBD,gBAAgB;AAChB,wBAAgB,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAezE;AAED,gBAAgB;AAChB,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AAExC;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,EAAE,GAAG;IAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,QAMtG"}
|