@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 @@
|
|
|
1
|
+
{"version":3,"file":"TreeActions.js","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/internal/TreeActions.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 { Draft, enableMapSet, produce } from \"immer\";\nimport { EMPTY, Observable, reduce, Subject, takeUntil } from \"rxjs\";\nimport { GenericInstanceFilter, HierarchyNode, HierarchyProvider } from \"@itwin/presentation-hierarchies\";\nimport { SelectionChangeType } from \"../UseSelectionHandler\";\nimport { HierarchyLevelOptions, ITreeLoader, LoadedTreePart, TreeLoader } from \"./TreeLoader\";\nimport { isTreeModelHierarchyNode, isTreeModelInfoNode, TreeModel, TreeModelHierarchyNode, TreeModelNode, TreeModelRootNode } from \"./TreeModel\";\nimport { createNodeId, sameNodes } from \"./Utils\";\n\nenableMapSet();\n\n/** @internal */\nexport class TreeActions {\n private _loader: ITreeLoader;\n private _currentModel: TreeModel;\n private _disposed = new Subject<void>();\n\n constructor(\n private _onModelChanged: (model: TreeModel) => void,\n seed?: TreeModel,\n ) {\n this._loader = new NoopTreeLoader();\n this._currentModel = seed ?? /* istanbul ignore next */ {\n idToNode: new Map(),\n parentChildMap: new Map(),\n rootNode: { id: undefined, nodeData: undefined },\n };\n }\n\n private updateTreeModel(updater: (model: Draft<TreeModel>) => void) {\n const newModel = produce(this._currentModel, updater);\n if (this._currentModel === newModel) {\n return;\n }\n\n this._currentModel = newModel;\n this._onModelChanged(this._currentModel);\n }\n\n private handleLoadedHierarchy(parentId: string | undefined, loadedHierarchy: TreeModel) {\n this.updateTreeModel((model) => {\n TreeModel.addHierarchyPart(model, parentId, loadedHierarchy);\n });\n }\n\n private onLoadingComplete(parentId: string | undefined) {\n this.updateTreeModel((model) => {\n TreeModel.setIsLoading(model, parentId, false);\n });\n }\n\n private loadNodes(parentId: string, ignoreCache?: boolean) {\n const parentNode = this._currentModel.idToNode.get(parentId);\n // istanbul ignore if\n if (!parentNode || !isTreeModelHierarchyNode(parentNode)) {\n return;\n }\n\n this._loader\n .loadNodes({\n parent: parentNode,\n getHierarchyLevelOptions: (node) => createHierarchyLevelOptions(this._currentModel, getNonGroupedParentId(node)),\n shouldLoadChildren: (node) => !!node.nodeData.autoExpand,\n ignoreCache,\n })\n .pipe(collectTreePartsUntil(this._disposed))\n .subscribe({\n next: (loadedHierarchy) => {\n this.handleLoadedHierarchy(parentId, loadedHierarchy);\n },\n complete: () => {\n this.onLoadingComplete(parentId);\n },\n });\n }\n\n private reloadSubTree(parentId: string | undefined, oldModel: TreeModel, options?: { discardState?: boolean }) {\n const currModel = this._currentModel;\n const expandedNodes = !!options?.discardState ? [] : collectNodes(parentId, oldModel, (node) => node.isExpanded === true);\n const collapsedNodes = !!options?.discardState ? [] : collectNodes(parentId, oldModel, (node) => node.isExpanded === false);\n const getHierarchyLevelOptions = (node: TreeModelRootNode | TreeModelHierarchyNode) => {\n if (!!options?.discardState) {\n return { instanceFilter: undefined, hierarchyLevelSizeLimit: undefined };\n }\n const filteredNodeId = getNonGroupedParentId(node);\n return createHierarchyLevelOptions(filteredNodeId === parentId ? currModel : oldModel, filteredNodeId);\n };\n const shouldLoadChildren = (node: TreeModelHierarchyNode) => {\n if (expandedNodes.findIndex((expandedNode) => sameNodes(expandedNode.nodeData, node.nodeData)) !== -1) {\n return true;\n }\n if (collapsedNodes.findIndex((collapsedNode) => sameNodes(collapsedNode.nodeData, node.nodeData)) !== -1) {\n return false;\n }\n return !!node.nodeData.autoExpand;\n };\n const buildNode = (node: TreeModelHierarchyNode) => (!!options?.discardState || node.id === parentId ? node : addAttributes(node, oldModel));\n\n const rootNode = parentId !== undefined ? this.getNode(parentId) : currModel.rootNode;\n // istanbul ignore if\n if (!rootNode || isTreeModelInfoNode(rootNode)) {\n return;\n }\n\n if (parentId === undefined) {\n // cancel all ongoing requests\n this._disposed.next();\n }\n\n this._loader\n .loadNodes({ parent: rootNode, getHierarchyLevelOptions, shouldLoadChildren, buildNode })\n .pipe(collectTreePartsUntil(this._disposed, !!options?.discardState ? undefined : { ...currModel.rootNode }))\n .subscribe({\n next: (newModel) => {\n this.handleLoadedHierarchy(parentId, newModel);\n },\n complete: () => {\n this.onLoadingComplete(parentId);\n },\n });\n }\n\n public dispose() {\n this._disposed.next();\n }\n\n public setHierarchyProvider(provider?: HierarchyProvider) {\n this._loader = provider ? new TreeLoader(provider) : /* istanbul ignore next */ new NoopTreeLoader();\n }\n\n public getNode(nodeId: string | undefined): TreeModelNode | TreeModelRootNode | undefined {\n return TreeModel.getNode(this._currentModel, nodeId);\n }\n\n public selectNodes(nodeIds: Array<string>, changeType: SelectionChangeType) {\n this.updateTreeModel((model) => {\n TreeModel.selectNodes(model, nodeIds, changeType);\n });\n }\n\n public expandNode(nodeId: string, isExpanded: boolean) {\n let childrenAction: ReturnType<typeof TreeModel.expandNode> = \"none\";\n this.updateTreeModel((model) => {\n childrenAction = TreeModel.expandNode(model, nodeId, isExpanded);\n });\n\n if (childrenAction === \"none\") {\n return;\n }\n\n this.loadNodes(nodeId, childrenAction === \"reloadChildren\");\n }\n\n public setHierarchyLimit(nodeId: string | undefined, limit?: number | \"unbounded\") {\n const oldModel = this._currentModel;\n let loadChildren = false;\n this.updateTreeModel((model) => {\n loadChildren = TreeModel.setHierarchyLimit(model, nodeId, limit);\n });\n\n if (!loadChildren) {\n return;\n }\n\n this.reloadSubTree(nodeId, oldModel);\n }\n\n public setInstanceFilter(nodeId: string | undefined, filter?: GenericInstanceFilter) {\n const oldModel = this._currentModel;\n let loadChildren = false;\n this.updateTreeModel((model) => {\n loadChildren = TreeModel.setInstanceFilter(model, nodeId, filter);\n });\n\n if (!loadChildren) {\n return;\n }\n\n this.reloadSubTree(nodeId, oldModel);\n }\n\n public reloadTree(options?: { discardState?: boolean }) {\n const oldModel = this._currentModel;\n this.updateTreeModel((model) => {\n model.rootNode.isLoading = true;\n });\n\n this.reloadSubTree(undefined, oldModel, { ...options });\n }\n}\n\nfunction collectTreePartsUntil(untilNotifier: Observable<void>, rootNode?: TreeModelRootNode) {\n return (source: Observable<LoadedTreePart>) =>\n source.pipe(\n reduce<LoadedTreePart, TreeModel>(\n (treeModel, loadedPart) => {\n addNodesToModel(treeModel, loadedPart);\n return treeModel;\n },\n {\n idToNode: new Map(),\n parentChildMap: new Map(),\n rootNode: rootNode ?? { id: undefined, nodeData: undefined },\n },\n ),\n takeUntil(untilNotifier),\n );\n}\n\nfunction addNodesToModel(model: TreeModel, hierarchyPart: LoadedTreePart) {\n model.parentChildMap.set(\n hierarchyPart.parentId,\n hierarchyPart.loadedNodes.map((node) => node.id),\n );\n for (const node of hierarchyPart.loadedNodes) {\n model.idToNode.set(node.id, node);\n }\n const parentNode = hierarchyPart.parentId ? model.idToNode.get(hierarchyPart.parentId) : undefined;\n if (parentNode && isTreeModelHierarchyNode(parentNode)) {\n parentNode.isExpanded = true;\n }\n}\n\nfunction addAttributes(node: TreeModelHierarchyNode, oldModel: TreeModel) {\n const oldNode = oldModel.idToNode.get(node.id);\n if (oldNode && isTreeModelHierarchyNode(oldNode)) {\n node.hierarchyLimit = oldNode.hierarchyLimit;\n node.instanceFilter = oldNode.instanceFilter;\n node.isSelected = oldNode.isSelected;\n }\n return node;\n}\n\nfunction collectNodes(parentId: string | undefined, model: TreeModel, pred: (node: TreeModelHierarchyNode) => boolean): TreeModelHierarchyNode[] {\n const currentChildren = model.parentChildMap.get(parentId);\n if (!currentChildren) {\n return [];\n }\n\n if (parentId === undefined) {\n return currentChildren.flatMap((child) => collectNodes(child, model, pred));\n }\n\n const currNode = model.idToNode.get(parentId);\n if (!currNode || !isTreeModelHierarchyNode(currNode) || !pred(currNode)) {\n return [];\n }\n\n return [currNode, ...currentChildren.flatMap((child) => collectNodes(child, model, pred))];\n}\n\nfunction getNonGroupedParentId(node: TreeModelHierarchyNode | TreeModelRootNode) {\n if (!node.nodeData || !HierarchyNode.isGroupingNode(node.nodeData)) {\n return node.id;\n }\n\n if (!node.nodeData.nonGroupingAncestor) {\n return undefined;\n }\n\n return createNodeId(node.nodeData.nonGroupingAncestor);\n}\n\nfunction createHierarchyLevelOptions(model: TreeModel, nodeId: string | undefined): HierarchyLevelOptions {\n if (nodeId === undefined) {\n return { instanceFilter: model.rootNode.instanceFilter, hierarchyLevelSizeLimit: model.rootNode.hierarchyLimit };\n }\n\n const modelNode = model.idToNode.get(nodeId);\n if (!modelNode || isTreeModelInfoNode(modelNode)) {\n return { instanceFilter: undefined, hierarchyLevelSizeLimit: undefined };\n }\n return { instanceFilter: modelNode.instanceFilter, hierarchyLevelSizeLimit: modelNode.hierarchyLimit };\n}\n\n// istanbul ignore next\nclass NoopTreeLoader implements ITreeLoader {\n public loadNodes(): Observable<LoadedTreePart> {\n return EMPTY;\n }\n}\n"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Observable } from "rxjs";
|
|
2
|
+
import { GenericInstanceFilter, HierarchyProvider } from "@itwin/presentation-hierarchies";
|
|
3
|
+
import { TreeModelHierarchyNode, TreeModelNode, TreeModelRootNode } from "./TreeModel";
|
|
4
|
+
/** @internal */
|
|
5
|
+
export interface LoadedTreePart {
|
|
6
|
+
parentId: string | undefined;
|
|
7
|
+
loadedNodes: TreeModelNode[];
|
|
8
|
+
}
|
|
9
|
+
/** @internal */
|
|
10
|
+
export interface HierarchyLevelOptions {
|
|
11
|
+
instanceFilter?: GenericInstanceFilter;
|
|
12
|
+
hierarchyLevelSizeLimit?: number | "unbounded";
|
|
13
|
+
}
|
|
14
|
+
/** @internal */
|
|
15
|
+
export interface LoadNodesOptions {
|
|
16
|
+
parent: TreeModelHierarchyNode | TreeModelRootNode;
|
|
17
|
+
getHierarchyLevelOptions: (node: TreeModelRootNode | TreeModelHierarchyNode) => HierarchyLevelOptions;
|
|
18
|
+
shouldLoadChildren: (node: TreeModelHierarchyNode) => boolean;
|
|
19
|
+
buildNode?: (node: TreeModelHierarchyNode) => TreeModelHierarchyNode;
|
|
20
|
+
ignoreCache?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/** @internal */
|
|
23
|
+
export interface ITreeLoader {
|
|
24
|
+
loadNodes(options: LoadNodesOptions): Observable<LoadedTreePart>;
|
|
25
|
+
}
|
|
26
|
+
/** @internal */
|
|
27
|
+
export declare class TreeLoader implements ITreeLoader {
|
|
28
|
+
private _hierarchyProvider;
|
|
29
|
+
constructor(_hierarchyProvider: HierarchyProvider);
|
|
30
|
+
private loadChildren;
|
|
31
|
+
loadNodes({ shouldLoadChildren, ...options }: LoadNodesOptions): Observable<LoadedTreePart>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=TreeLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeLoader.d.ts","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/internal/TreeLoader.ts"],"names":[],"mappings":"AAKA,OAAO,EAA2C,UAAU,EAAe,MAAM,MAAM,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAiB,iBAAiB,EAA0B,MAAM,iCAAiC,CAAC;AAClI,OAAO,EAA4B,sBAAsB,EAAqB,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGpI,gBAAgB;AAChB,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,WAAW,EAAE,aAAa,EAAE,CAAC;CAC9B;AAED,gBAAgB;AAChB,MAAM,WAAW,qBAAqB;IACpC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,uBAAuB,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;CAChD;AAED,gBAAgB;AAChB,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,sBAAsB,GAAG,iBAAiB,CAAC;IACnD,wBAAwB,EAAE,CAAC,IAAI,EAAE,iBAAiB,GAAG,sBAAsB,KAAK,qBAAqB,CAAC;IACtG,kBAAkB,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,OAAO,CAAC;IAC9D,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,sBAAsB,CAAC;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,gBAAgB;AAChB,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;CAClE;AAED,gBAAgB;AAChB,qBAAa,UAAW,YAAW,WAAW;IAChC,OAAO,CAAC,kBAAkB;gBAAlB,kBAAkB,EAAE,iBAAiB;IAEzD,OAAO,CAAC,YAAY;IAyCb,SAAS,CAAC,EAAE,kBAAkB,EAAE,GAAG,OAAO,EAAE,EAAE,gBAAgB;CAStE"}
|
|
@@ -0,0 +1,71 @@
|
|
|
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 presentation_hierarchies_1 = require("@itwin/presentation-hierarchies");
|
|
10
|
+
const TreeModel_1 = require("./TreeModel");
|
|
11
|
+
const Utils_1 = require("./Utils");
|
|
12
|
+
/** @internal */
|
|
13
|
+
class TreeLoader {
|
|
14
|
+
_hierarchyProvider;
|
|
15
|
+
constructor(_hierarchyProvider) {
|
|
16
|
+
this._hierarchyProvider = _hierarchyProvider;
|
|
17
|
+
}
|
|
18
|
+
loadChildren({ parent, getHierarchyLevelOptions, buildNode, ignoreCache }) {
|
|
19
|
+
const { instanceFilter, hierarchyLevelSizeLimit } = getHierarchyLevelOptions(parent);
|
|
20
|
+
const infoNodeIdBase = `${parent.id ?? "<root>"}`;
|
|
21
|
+
const treeModelNodesFactory = createTreeModelNodesFactory(buildNode);
|
|
22
|
+
return (0, rxjs_1.from)(this._hierarchyProvider.getNodes({
|
|
23
|
+
parentNode: parent.nodeData,
|
|
24
|
+
hierarchyLevelSizeLimit,
|
|
25
|
+
instanceFilter,
|
|
26
|
+
ignoreCache,
|
|
27
|
+
})).pipe((0, rxjs_1.toArray)(), (0, rxjs_1.catchError)((err) => {
|
|
28
|
+
const nodeProps = {
|
|
29
|
+
id: `${infoNodeIdBase}-${err.message}`,
|
|
30
|
+
parentId: parent.id,
|
|
31
|
+
};
|
|
32
|
+
if (err instanceof presentation_hierarchies_1.RowsLimitExceededError) {
|
|
33
|
+
return (0, rxjs_1.of)([{ ...nodeProps, type: "ResultSetTooLarge", resultSetSizeLimit: err.limit }]);
|
|
34
|
+
}
|
|
35
|
+
return (0, rxjs_1.of)([{ ...nodeProps, type: "Unknown", message: "Failed to create hierarchy level" }]);
|
|
36
|
+
}), (0, rxjs_1.map)((childNodes) => ({
|
|
37
|
+
parentId: parent.id,
|
|
38
|
+
loadedNodes: instanceFilter && childNodes.length === 0
|
|
39
|
+
? [
|
|
40
|
+
{
|
|
41
|
+
id: `${infoNodeIdBase}-no-filter-matches`,
|
|
42
|
+
parentId: parent.id,
|
|
43
|
+
type: "NoFilterMatches",
|
|
44
|
+
},
|
|
45
|
+
]
|
|
46
|
+
: childNodes.map(treeModelNodesFactory),
|
|
47
|
+
})));
|
|
48
|
+
}
|
|
49
|
+
loadNodes({ shouldLoadChildren, ...options }) {
|
|
50
|
+
return this.loadChildren(options).pipe((0, rxjs_1.expand)((loadedPart) => (0, rxjs_1.from)(loadedPart.loadedNodes.filter((node) => (0, TreeModel_1.isTreeModelHierarchyNode)(node) && shouldLoadChildren(node))).pipe((0, rxjs_1.mergeMap)((node) => this.loadChildren({ ...options, parent: node })))));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.TreeLoader = TreeLoader;
|
|
54
|
+
function createTreeModelNodesFactory(buildNode) {
|
|
55
|
+
return (node) => {
|
|
56
|
+
if (!isHierarchyNode(node)) {
|
|
57
|
+
return node;
|
|
58
|
+
}
|
|
59
|
+
const modelNode = {
|
|
60
|
+
id: (0, Utils_1.createNodeId)(node),
|
|
61
|
+
children: node.children,
|
|
62
|
+
label: node.label,
|
|
63
|
+
nodeData: node,
|
|
64
|
+
};
|
|
65
|
+
return buildNode ? buildNode(modelNode) : modelNode;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function isHierarchyNode(node) {
|
|
69
|
+
return "key" in node && node.key !== undefined;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=TreeLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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\";\nimport { createNodeId } from \"./Utils\";\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 constructor(private _hierarchyProvider: HierarchyProvider) {}\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);\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}-${err.message}`,\n parentId: parent.id,\n };\n if (err instanceof RowsLimitExceededError) {\n return of([{ ...nodeProps, type: \"ResultSetTooLarge\" as const, resultSetSizeLimit: err.limit }]);\n }\n return of([{ ...nodeProps, type: \"Unknown\" as const, message: \"Failed to create hierarchy level\" }]);\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?: (node: TreeModelHierarchyNode) => TreeModelHierarchyNode,\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: createNodeId(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"]}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { GenericInstanceFilter, HierarchyNode } from "@itwin/presentation-hierarchies";
|
|
2
|
+
import { SelectionChangeType } from "../UseSelectionHandler";
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeModel.d.ts","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/internal/TreeModel.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,gBAAgB;AAChB,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,SAAS,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IACtC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,gBAAgB;AAChB,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IACtC,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAED,gBAAgB;AAChB,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,gBAAgB;AAChB,MAAM,WAAW,gCAAgC;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,gBAAgB;AAChB,MAAM,WAAW,kCAAkC;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,gBAAgB;AAChB,MAAM,MAAM,iBAAiB,GAAG,wBAAwB,GAAG,kCAAkC,GAAG,gCAAgC,CAAC;AAEjI,gBAAgB;AAChB,MAAM,MAAM,aAAa,GAAG,sBAAsB,GAAG,iBAAiB,CAAC;AAEvE,gBAAgB;AAChB,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,sBAAsB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,IAAI,IAAI,sBAAsB,CAE7I;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,sBAAsB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,IAAI,IAAI,iBAAiB,CAEnI;AAED,gBAAgB;AAChB,MAAM,WAAW,SAAS;IACxB,cAAc,EAAE,GAAG,CAAC,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAClD,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACrC,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,gBAAgB;AAChB,yBAAiB,SAAS,CAAC;IACzB,SAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,cAAc,GAAG,gBAAgB,CA8B5H;IAED,gBAAgB;IAChB,SAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,aAAa,EAAE,SAAS,GAAG,IAAI,CAgB7G;IAED,SAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAclF;IAED,SAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAIrH;IAED,SAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAIvH;IAED,SAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,mBAAmB,QAiBpG;IAED,SAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAGxE;IAED,SAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,iBAAiB,GAAG,SAAS,CAKnH;IAED,SAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,OAAO,QAW5F;CACF"}
|
|
@@ -0,0 +1,154 @@
|
|
|
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 = exports.isTreeModelInfoNode = exports.isTreeModelHierarchyNode = void 0;
|
|
8
|
+
/** @internal */
|
|
9
|
+
function isTreeModelHierarchyNode(node) {
|
|
10
|
+
return "nodeData" in node && node.nodeData !== undefined;
|
|
11
|
+
}
|
|
12
|
+
exports.isTreeModelHierarchyNode = isTreeModelHierarchyNode;
|
|
13
|
+
/** @internal */
|
|
14
|
+
function isTreeModelInfoNode(node) {
|
|
15
|
+
return "type" in node && node.type !== undefined;
|
|
16
|
+
}
|
|
17
|
+
exports.isTreeModelInfoNode = isTreeModelInfoNode;
|
|
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
|
+
// istanbul ignore else
|
|
59
|
+
if (parentNode && !isTreeModelInfoNode(parentNode)) {
|
|
60
|
+
parentNode.isLoading = false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
TreeModel.addHierarchyPart = addHierarchyPart;
|
|
64
|
+
function removeSubTree(model, parentId) {
|
|
65
|
+
const currentChildren = model.parentChildMap.get(parentId);
|
|
66
|
+
if (!currentChildren) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
model.parentChildMap.delete(parentId);
|
|
70
|
+
for (const childId of currentChildren) {
|
|
71
|
+
const childNode = model.idToNode.get(childId);
|
|
72
|
+
if (childNode && isTreeModelHierarchyNode(childNode)) {
|
|
73
|
+
removeSubTree(model, childNode.id);
|
|
74
|
+
}
|
|
75
|
+
model.idToNode.delete(childId);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
TreeModel.removeSubTree = removeSubTree;
|
|
79
|
+
function setHierarchyLimit(model, nodeId, limit) {
|
|
80
|
+
return updateForReload(model, nodeId, (node) => {
|
|
81
|
+
node.hierarchyLimit = limit;
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
TreeModel.setHierarchyLimit = setHierarchyLimit;
|
|
85
|
+
function setInstanceFilter(model, nodeId, filter) {
|
|
86
|
+
return updateForReload(model, nodeId, (node) => {
|
|
87
|
+
node.instanceFilter = filter;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
TreeModel.setInstanceFilter = setInstanceFilter;
|
|
91
|
+
function selectNodes(model, nodeIds, changeType) {
|
|
92
|
+
if (changeType === "replace") {
|
|
93
|
+
for (const [nodeId, node] of model.idToNode) {
|
|
94
|
+
if (!isTreeModelHierarchyNode(node)) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
node.isSelected = !!nodeIds.find((id) => id === nodeId);
|
|
98
|
+
}
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
for (const nodeId of nodeIds) {
|
|
102
|
+
const modelNode = model.idToNode.get(nodeId);
|
|
103
|
+
if (!modelNode || !isTreeModelHierarchyNode(modelNode)) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
modelNode.isSelected = changeType === "add";
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
TreeModel.selectNodes = selectNodes;
|
|
110
|
+
function isNodeSelected(model, nodeId) {
|
|
111
|
+
const currentNode = model.idToNode.get(nodeId);
|
|
112
|
+
return !!currentNode && isTreeModelHierarchyNode(currentNode) && !!currentNode.isSelected;
|
|
113
|
+
}
|
|
114
|
+
TreeModel.isNodeSelected = isNodeSelected;
|
|
115
|
+
function getNode(model, nodeId) {
|
|
116
|
+
if (!nodeId) {
|
|
117
|
+
return model.rootNode;
|
|
118
|
+
}
|
|
119
|
+
return model.idToNode.get(nodeId);
|
|
120
|
+
}
|
|
121
|
+
TreeModel.getNode = getNode;
|
|
122
|
+
function setIsLoading(model, nodeId, isLoading) {
|
|
123
|
+
if (nodeId === undefined) {
|
|
124
|
+
model.rootNode.isLoading = isLoading;
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const modelNode = model.idToNode.get(nodeId);
|
|
128
|
+
// istanbul ignore if
|
|
129
|
+
if (!modelNode || !isTreeModelHierarchyNode(modelNode)) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
modelNode.isLoading = isLoading;
|
|
133
|
+
}
|
|
134
|
+
TreeModel.setIsLoading = setIsLoading;
|
|
135
|
+
})(TreeModel || (exports.TreeModel = TreeModel = {}));
|
|
136
|
+
function updateForReload(model, nodeId, update) {
|
|
137
|
+
TreeModel.removeSubTree(model, nodeId);
|
|
138
|
+
if (nodeId === undefined) {
|
|
139
|
+
update(model.rootNode);
|
|
140
|
+
model.rootNode.isLoading = true;
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
const modelNode = model.idToNode.get(nodeId);
|
|
144
|
+
if (!modelNode || !isTreeModelHierarchyNode(modelNode)) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
update(modelNode);
|
|
148
|
+
if (modelNode.isExpanded) {
|
|
149
|
+
modelNode.isLoading = true;
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=TreeModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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\";\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 // istanbul ignore else\n if (parentNode && !isTreeModelInfoNode(parentNode)) {\n parentNode.isLoading = false;\n }\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 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 // istanbul ignore if\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"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { SelectionChangeType } from "../UseSelectionHandler";
|
|
2
|
+
import { TreeModelNode, TreeModelRootNode } from "./TreeModel";
|
|
3
|
+
/** @internal */
|
|
4
|
+
export interface TreeSelectionOptions {
|
|
5
|
+
isNodeSelected: (nodeId: string) => boolean;
|
|
6
|
+
selectNodes: (nodeIds: Array<string>, changeType: SelectionChangeType) => void;
|
|
7
|
+
}
|
|
8
|
+
/** @internal */
|
|
9
|
+
export interface UseUnifiedTreeSelectionProps {
|
|
10
|
+
imodelKey: string;
|
|
11
|
+
sourceName: string;
|
|
12
|
+
getNode: (nodeId: string) => TreeModelNode | TreeModelRootNode | undefined;
|
|
13
|
+
}
|
|
14
|
+
/** @internal */
|
|
15
|
+
export declare function useUnifiedTreeSelection({ imodelKey, sourceName, getNode }: UseUnifiedTreeSelectionProps): TreeSelectionOptions;
|
|
16
|
+
//# sourceMappingURL=UseUnifiedSelection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UseUnifiedSelection.d.ts","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/internal/UseUnifiedSelection.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAA4B,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEzF,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,gBAAgB;AAChB,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,GAAG,iBAAiB,GAAG,SAAS,CAAC;CAC5E;AAED,gBAAgB;AAChB,wBAAgB,uBAAuB,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,4BAA4B,GAAG,oBAAoB,CA2B9H"}
|
|
@@ -0,0 +1,96 @@
|
|
|
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 = void 0;
|
|
8
|
+
const react_1 = require("react");
|
|
9
|
+
const presentation_hierarchies_1 = require("@itwin/presentation-hierarchies");
|
|
10
|
+
const unified_selection_1 = require("@itwin/unified-selection");
|
|
11
|
+
const UnifiedSelectionContext_1 = require("../UnifiedSelectionContext");
|
|
12
|
+
const TreeModel_1 = require("./TreeModel");
|
|
13
|
+
/** @internal */
|
|
14
|
+
function useUnifiedTreeSelection({ imodelKey, sourceName, getNode }) {
|
|
15
|
+
const [options, setOptions] = (0, react_1.useState)(() => ({
|
|
16
|
+
isNodeSelected: /* istanbul ignore next */ () => false,
|
|
17
|
+
selectNodes: /* istanbul ignore next */ () => { },
|
|
18
|
+
}));
|
|
19
|
+
const selectionStorage = (0, UnifiedSelectionContext_1.useUnifiedSelectionContext)();
|
|
20
|
+
(0, react_1.useEffect)(() => {
|
|
21
|
+
if (!selectionStorage) {
|
|
22
|
+
setOptions({
|
|
23
|
+
isNodeSelected: () => false,
|
|
24
|
+
selectNodes: () => { },
|
|
25
|
+
});
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
setOptions(createOptions(imodelKey, sourceName, selectionStorage, getNode));
|
|
29
|
+
return selectionStorage.selectionChangeEvent.addListener((args) => {
|
|
30
|
+
if (imodelKey !== args.imodelKey || args.level > 0) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
setOptions(createOptions(imodelKey, sourceName, selectionStorage, getNode));
|
|
34
|
+
});
|
|
35
|
+
}, [selectionStorage, getNode, imodelKey, sourceName]);
|
|
36
|
+
return options;
|
|
37
|
+
}
|
|
38
|
+
exports.useUnifiedTreeSelection = useUnifiedTreeSelection;
|
|
39
|
+
function createOptions(key, source, storage, getNode) {
|
|
40
|
+
return {
|
|
41
|
+
isNodeSelected: (nodeId) => {
|
|
42
|
+
const node = getNode(nodeId);
|
|
43
|
+
if (!node || !(0, TreeModel_1.isTreeModelHierarchyNode)(node)) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
const selectables = storage.getSelection({ imodelKey: key, level: 0 });
|
|
47
|
+
const hierarchyNode = node.nodeData;
|
|
48
|
+
if (presentation_hierarchies_1.HierarchyNode.isInstancesNode(hierarchyNode)) {
|
|
49
|
+
return unified_selection_1.Selectables.hasAny(selectables, hierarchyNode.key.instanceKeys);
|
|
50
|
+
}
|
|
51
|
+
return unified_selection_1.Selectables.has(selectables, { identifier: node.id });
|
|
52
|
+
},
|
|
53
|
+
selectNodes: (nodeIds, changeType) => {
|
|
54
|
+
let selectables = [];
|
|
55
|
+
for (const nodeId of nodeIds) {
|
|
56
|
+
const node = getNode(nodeId);
|
|
57
|
+
if (!node || !(0, TreeModel_1.isTreeModelHierarchyNode)(node)) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
selectables = [...selectables, ...createSelectables(node.id, node.nodeData)];
|
|
61
|
+
}
|
|
62
|
+
const actionProps = { imodelKey: key, source, selectables, level: 0 };
|
|
63
|
+
switch (changeType) {
|
|
64
|
+
case "add":
|
|
65
|
+
storage.addToSelection(actionProps);
|
|
66
|
+
return;
|
|
67
|
+
case "remove":
|
|
68
|
+
storage.removeFromSelection(actionProps);
|
|
69
|
+
return;
|
|
70
|
+
case "replace":
|
|
71
|
+
storage.replaceSelection(actionProps);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function createSelectables(nodeId, node) {
|
|
78
|
+
if (presentation_hierarchies_1.HierarchyNode.isInstancesNode(node)) {
|
|
79
|
+
return node.key.instanceKeys;
|
|
80
|
+
}
|
|
81
|
+
return [
|
|
82
|
+
{
|
|
83
|
+
identifier: nodeId,
|
|
84
|
+
async *loadInstanceKeys() {
|
|
85
|
+
if (!presentation_hierarchies_1.HierarchyNode.isGroupingNode(node)) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
for (const key of node.groupedInstanceKeys) {
|
|
89
|
+
yield key;
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
data: node,
|
|
93
|
+
},
|
|
94
|
+
];
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=UseUnifiedSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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 { HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { Selectable, Selectables, SelectionStorage } from \"@itwin/unified-selection\";\nimport { useUnifiedSelectionContext } from \"../UnifiedSelectionContext\";\nimport { SelectionChangeType } from \"../UseSelectionHandler\";\nimport { isTreeModelHierarchyNode, TreeModelNode, TreeModelRootNode } from \"./TreeModel\";\n\n/** @internal */\nexport interface TreeSelectionOptions {\n isNodeSelected: (nodeId: string) => boolean;\n selectNodes: (nodeIds: Array<string>, changeType: SelectionChangeType) => void;\n}\n\n/** @internal */\nexport interface UseUnifiedTreeSelectionProps {\n imodelKey: string;\n sourceName: string;\n getNode: (nodeId: string) => TreeModelNode | TreeModelRootNode | undefined;\n}\n\n/** @internal */\nexport function useUnifiedTreeSelection({ imodelKey, sourceName, getNode }: UseUnifiedTreeSelectionProps): TreeSelectionOptions {\n const [options, setOptions] = useState<TreeSelectionOptions>(() => ({\n isNodeSelected: /* istanbul ignore next */ () => false,\n selectNodes: /* istanbul ignore next */ () => {},\n }));\n\n const selectionStorage = useUnifiedSelectionContext();\n useEffect(() => {\n if (!selectionStorage) {\n setOptions({\n isNodeSelected: () => false,\n selectNodes: () => {},\n });\n return;\n }\n\n setOptions(createOptions(imodelKey, sourceName, selectionStorage, getNode));\n return selectionStorage.selectionChangeEvent.addListener((args) => {\n if (imodelKey !== args.imodelKey || args.level > 0) {\n return;\n }\n\n setOptions(createOptions(imodelKey, sourceName, selectionStorage, getNode));\n });\n }, [selectionStorage, getNode, imodelKey, sourceName]);\n\n return options;\n}\n\nfunction createOptions(\n key: string,\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\n const selectables = storage.getSelection({ imodelKey: key, level: 0 });\n\n const hierarchyNode = node.nodeData;\n if (HierarchyNode.isInstancesNode(hierarchyNode)) {\n return Selectables.hasAny(selectables, hierarchyNode.key.instanceKeys);\n }\n\n return Selectables.has(selectables, { identifier: node.id });\n },\n\n selectNodes: (nodeIds: Array<string>, changeType: SelectionChangeType) => {\n let selectables: Selectable[] = [];\n\n for (const nodeId of nodeIds) {\n const node = getNode(nodeId);\n if (!node || !isTreeModelHierarchyNode(node)) {\n return;\n }\n selectables = [...selectables, ...createSelectables(node.id, node.nodeData)];\n }\n\n const actionProps = { imodelKey: key, source, selectables, level: 0 };\n\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\nfunction createSelectables(nodeId: string, node: HierarchyNode): Selectable[] {\n if (HierarchyNode.isInstancesNode(node)) {\n return node.key.instanceKeys;\n }\n\n return [\n {\n identifier: nodeId,\n async *loadInstanceKeys() {\n if (!HierarchyNode.isGroupingNode(node)) {\n return;\n }\n\n for (const key of node.groupedInstanceKeys) {\n yield key;\n }\n },\n data: node,\n },\n ];\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { HierarchyNode } from "@itwin/presentation-hierarchies";
|
|
2
|
+
/** @internal */
|
|
3
|
+
export declare function createNodeId(node: Pick<HierarchyNode, "key" | "parentKeys">): string;
|
|
4
|
+
/** @internal */
|
|
5
|
+
export declare function sameNodes(lhs: HierarchyNode, rhs: HierarchyNode): boolean;
|
|
6
|
+
/** @internal */
|
|
7
|
+
export declare const MAX_LIMIT_OVERRIDE = 10000;
|
|
8
|
+
//# sourceMappingURL=Utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/internal/Utils.ts"],"names":[],"mappings":"AAKA,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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
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.MAX_LIMIT_OVERRIDE = exports.sameNodes = exports.createNodeId = void 0;
|
|
8
|
+
const presentation_hierarchies_1 = require("@itwin/presentation-hierarchies");
|
|
9
|
+
/** @internal */
|
|
10
|
+
function createNodeId(node) {
|
|
11
|
+
return [...node.parentKeys.map(serializeNodeKey), serializeNodeKey(node.key)].join(";");
|
|
12
|
+
}
|
|
13
|
+
exports.createNodeId = createNodeId;
|
|
14
|
+
function serializeNodeKey(key) {
|
|
15
|
+
return presentation_hierarchies_1.HierarchyNodeKey.isCustom(key) ? key : convertObjectValuesToString(key);
|
|
16
|
+
}
|
|
17
|
+
function convertObjectValuesToString(obj) {
|
|
18
|
+
return Object.entries(obj)
|
|
19
|
+
.map(([, value]) => {
|
|
20
|
+
if (typeof value === "object") {
|
|
21
|
+
return convertObjectValuesToString(value);
|
|
22
|
+
}
|
|
23
|
+
return String(value);
|
|
24
|
+
})
|
|
25
|
+
.join(",");
|
|
26
|
+
}
|
|
27
|
+
/** @internal */
|
|
28
|
+
function sameNodes(lhs, rhs) {
|
|
29
|
+
if (presentation_hierarchies_1.HierarchyNodeKey.compare(lhs.key, rhs.key) !== 0) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
if (lhs.parentKeys.length !== rhs.parentKeys.length) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
for (let i = lhs.parentKeys.length - 1; i >= 0; --i) {
|
|
36
|
+
if (presentation_hierarchies_1.HierarchyNodeKey.compare(lhs.parentKeys[i], rhs.parentKeys[i]) !== 0) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
exports.sameNodes = sameNodes;
|
|
43
|
+
/** @internal */
|
|
44
|
+
exports.MAX_LIMIT_OVERRIDE = 10000;
|
|
45
|
+
//# sourceMappingURL=Utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/internal/Utils.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG,8EAAkF;AAElF,gBAAgB;AAChB,SAAgB,YAAY,CAAC,IAA+C;IAC1E,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1F,CAAC;AAFD,oCAEC;AAED,SAAS,gBAAgB,CAAC,GAAqB;IAC7C,OAAO,2CAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,2BAA2B,CAAC,GAAW;IAC9C,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;SACvB,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE;QACjB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,2BAA2B,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,gBAAgB;AAChB,SAAgB,SAAS,CAAC,GAAkB,EAAE,GAAkB;IAC9D,IAAI,2CAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACrD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACpD,IAAI,2CAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACzE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAfD,8BAeC;AAED,gBAAgB;AACH,QAAA,kBAAkB,GAAG,KAAK,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { HierarchyNode, HierarchyNodeKey } from \"@itwin/presentation-hierarchies\";\n\n/** @internal */\nexport function createNodeId(node: Pick<HierarchyNode, \"key\" | \"parentKeys\">) {\n return [...node.parentKeys.map(serializeNodeKey), serializeNodeKey(node.key)].join(\";\");\n}\n\nfunction serializeNodeKey(key: HierarchyNodeKey): string {\n return HierarchyNodeKey.isCustom(key) ? key : convertObjectValuesToString(key);\n}\n\nfunction convertObjectValuesToString(obj: object): string {\n return Object.entries(obj)\n .map(([, value]) => {\n if (typeof value === \"object\") {\n return convertObjectValuesToString(value);\n }\n return String(value);\n })\n .join(\",\");\n}\n\n/** @internal */\nexport function sameNodes(lhs: HierarchyNode, rhs: HierarchyNode): boolean {\n if (HierarchyNodeKey.compare(lhs.key, rhs.key) !== 0) {\n return false;\n }\n\n if (lhs.parentKeys.length !== rhs.parentKeys.length) {\n return false;\n }\n\n for (let i = lhs.parentKeys.length - 1; i >= 0; --i) {\n if (HierarchyNodeKey.compare(lhs.parentKeys[i], rhs.parentKeys[i]) !== 0) {\n return false;\n }\n }\n return true;\n}\n\n/** @internal */\nexport const MAX_LIMIT_OVERRIDE = 10000;\n"]}
|