@itwin/presentation-hierarchies-react 0.7.2 → 0.8.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.
Files changed (55) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/README.md +92 -74
  3. package/lib/cjs/presentation-hierarchies-react/UseIModelTree.d.ts +53 -0
  4. package/lib/cjs/presentation-hierarchies-react/UseIModelTree.d.ts.map +1 -0
  5. package/lib/cjs/presentation-hierarchies-react/UseIModelTree.js +65 -0
  6. package/lib/cjs/presentation-hierarchies-react/UseIModelTree.js.map +1 -0
  7. package/lib/cjs/presentation-hierarchies-react/UseTree.d.ts +16 -45
  8. package/lib/cjs/presentation-hierarchies-react/UseTree.d.ts.map +1 -1
  9. package/lib/cjs/presentation-hierarchies-react/UseTree.js +46 -47
  10. package/lib/cjs/presentation-hierarchies-react/UseTree.js.map +1 -1
  11. package/lib/cjs/presentation-hierarchies-react/internal/TreeActions.d.ts +3 -2
  12. package/lib/cjs/presentation-hierarchies-react/internal/TreeActions.d.ts.map +1 -1
  13. package/lib/cjs/presentation-hierarchies-react/internal/TreeActions.js +8 -6
  14. package/lib/cjs/presentation-hierarchies-react/internal/TreeActions.js.map +1 -1
  15. package/lib/cjs/presentation-hierarchies-react/internal/TreeLoader.d.ts +3 -2
  16. package/lib/cjs/presentation-hierarchies-react/internal/TreeLoader.d.ts.map +1 -1
  17. package/lib/cjs/presentation-hierarchies-react/internal/TreeLoader.js +6 -4
  18. package/lib/cjs/presentation-hierarchies-react/internal/TreeLoader.js.map +1 -1
  19. package/lib/cjs/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts +1 -3
  20. package/lib/cjs/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts.map +1 -1
  21. package/lib/cjs/presentation-hierarchies-react/internal/UseUnifiedSelection.js +79 -43
  22. package/lib/cjs/presentation-hierarchies-react/internal/UseUnifiedSelection.js.map +1 -1
  23. package/lib/cjs/presentation-hierarchies-react/internal/Utils.js +1 -1
  24. package/lib/cjs/presentation-hierarchies-react/internal/Utils.js.map +1 -1
  25. package/lib/cjs/presentation-hierarchies-react.d.ts +1 -0
  26. package/lib/cjs/presentation-hierarchies-react.d.ts.map +1 -1
  27. package/lib/cjs/presentation-hierarchies-react.js +4 -1
  28. package/lib/cjs/presentation-hierarchies-react.js.map +1 -1
  29. package/lib/esm/presentation-hierarchies-react/UseIModelTree.d.ts +53 -0
  30. package/lib/esm/presentation-hierarchies-react/UseIModelTree.d.ts.map +1 -0
  31. package/lib/esm/presentation-hierarchies-react/UseIModelTree.js +61 -0
  32. package/lib/esm/presentation-hierarchies-react/UseIModelTree.js.map +1 -0
  33. package/lib/esm/presentation-hierarchies-react/UseTree.d.ts +16 -45
  34. package/lib/esm/presentation-hierarchies-react/UseTree.d.ts.map +1 -1
  35. package/lib/esm/presentation-hierarchies-react/UseTree.js +47 -48
  36. package/lib/esm/presentation-hierarchies-react/UseTree.js.map +1 -1
  37. package/lib/esm/presentation-hierarchies-react/internal/TreeActions.d.ts +3 -2
  38. package/lib/esm/presentation-hierarchies-react/internal/TreeActions.d.ts.map +1 -1
  39. package/lib/esm/presentation-hierarchies-react/internal/TreeActions.js +8 -6
  40. package/lib/esm/presentation-hierarchies-react/internal/TreeActions.js.map +1 -1
  41. package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.d.ts +3 -2
  42. package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.d.ts.map +1 -1
  43. package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.js +6 -4
  44. package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.js.map +1 -1
  45. package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts +1 -3
  46. package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts.map +1 -1
  47. package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.js +79 -43
  48. package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.js.map +1 -1
  49. package/lib/esm/presentation-hierarchies-react/internal/Utils.js +1 -1
  50. package/lib/esm/presentation-hierarchies-react/internal/Utils.js.map +1 -1
  51. package/lib/esm/presentation-hierarchies-react.d.ts +1 -0
  52. package/lib/esm/presentation-hierarchies-react.d.ts.map +1 -1
  53. package/lib/esm/presentation-hierarchies-react.js +1 -0
  54. package/lib/esm/presentation-hierarchies-react.js.map +1 -1
  55. package/package.json +7 -5
@@ -7,15 +7,13 @@ export interface TreeSelectionOptions {
7
7
  }
8
8
  /** @beta */
9
9
  export interface UseUnifiedTreeSelectionProps {
10
- /** Key of the iModel. */
11
- imodelKey: string;
12
10
  /**
13
11
  * Identifier to distinguish this source of changes to the unified selection from another ones in the application.
14
12
  */
15
13
  sourceName: string;
16
14
  }
17
15
  /** @internal */
18
- export declare function useUnifiedTreeSelection({ imodelKey, sourceName, getNode, }: UseUnifiedTreeSelectionProps & {
16
+ export declare function useUnifiedTreeSelection({ sourceName, getNode, }: UseUnifiedTreeSelectionProps & {
19
17
  getNode: (nodeId: string) => TreeModelNode | TreeModelRootNode | undefined;
20
18
  }): TreeSelectionOptions;
21
19
  //# sourceMappingURL=UseUnifiedSelection.d.ts.map
@@ -1 +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,YAAY;AACZ,MAAM,WAAW,4BAA4B;IAC3C,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,gBAAgB;AAChB,wBAAgB,uBAAuB,CAAC,EACtC,SAAS,EACT,UAAU,EACV,OAAO,GACR,EAAE,4BAA4B,GAAG;IAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,GAAG,iBAAiB,GAAG,SAAS,CAAA;CAAE,GAAG,oBAAoB,CA2BtI"}
1
+ {"version":3,"file":"UseUnifiedSelection.d.ts","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/internal/UseUnifiedSelection.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAoD,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEjH,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,YAAY;AACZ,MAAM,WAAW,4BAA4B;IAC3C;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,gBAAgB;AAChB,wBAAgB,uBAAuB,CAAC,EACtC,UAAU,EACV,OAAO,GACR,EAAE,4BAA4B,GAAG;IAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,GAAG,iBAAiB,GAAG,SAAS,CAAA;CAAE,GAAG,oBAAoB,CA0BtI"}
@@ -11,7 +11,7 @@ const unified_selection_1 = require("@itwin/unified-selection");
11
11
  const UnifiedSelectionContext_1 = require("../UnifiedSelectionContext");
12
12
  const TreeModel_1 = require("./TreeModel");
13
13
  /** @internal */
14
- function useUnifiedTreeSelection({ imodelKey, sourceName, getNode, }) {
14
+ function useUnifiedTreeSelection({ sourceName, getNode, }) {
15
15
  const [options, setOptions] = (0, react_1.useState)(() => ({
16
16
  isNodeSelected: /* istanbul ignore next */ () => false,
17
17
  selectNodes: /* istanbul ignore next */ () => { },
@@ -25,71 +25,107 @@ function useUnifiedTreeSelection({ imodelKey, sourceName, getNode, }) {
25
25
  });
26
26
  return;
27
27
  }
28
- setOptions(createOptions(imodelKey, sourceName, selectionStorage, getNode));
28
+ setOptions(createOptions(sourceName, selectionStorage, getNode));
29
29
  return selectionStorage.selectionChangeEvent.addListener((args) => {
30
- if (imodelKey !== args.imodelKey || args.level > 0) {
30
+ if (args.level > 0) {
31
31
  return;
32
32
  }
33
- setOptions(createOptions(imodelKey, sourceName, selectionStorage, getNode));
33
+ setOptions(createOptions(sourceName, selectionStorage, getNode));
34
34
  });
35
- }, [selectionStorage, getNode, imodelKey, sourceName]);
35
+ }, [selectionStorage, getNode, sourceName]);
36
36
  return options;
37
37
  }
38
- function createOptions(key, source, storage, getNode) {
38
+ function createOptions(source, storage, getNode) {
39
39
  return {
40
40
  isNodeSelected: (nodeId) => {
41
41
  const node = getNode(nodeId);
42
42
  if (!node || !(0, TreeModel_1.isTreeModelHierarchyNode)(node)) {
43
43
  return false;
44
44
  }
45
- const selectables = storage.getSelection({ imodelKey: key, level: 0 });
46
- const hierarchyNode = node.nodeData;
47
- if (presentation_hierarchies_1.HierarchyNode.isInstancesNode(hierarchyNode)) {
48
- return unified_selection_1.Selectables.hasAny(selectables, hierarchyNode.key.instanceKeys);
49
- }
50
- return unified_selection_1.Selectables.has(selectables, { identifier: node.id });
45
+ return Object.entries(groupNodeSelectablesByIModelKey(node)).some(([imodelKey, nodeSelectables]) => {
46
+ const storageSelectables = storage.getSelection({ imodelKey, level: 0 });
47
+ return unified_selection_1.Selectables.hasAny(storageSelectables, nodeSelectables);
48
+ });
51
49
  },
52
50
  selectNodes: (nodeIds, changeType) => {
53
- let selectables = [];
51
+ const imodelSelectables = {};
54
52
  for (const nodeId of nodeIds) {
55
53
  const node = getNode(nodeId);
56
54
  if (!node || !(0, TreeModel_1.isTreeModelHierarchyNode)(node)) {
57
55
  return;
58
56
  }
59
- selectables = [...selectables, ...createSelectables(node.id, node.nodeData)];
60
- }
61
- const actionProps = { imodelKey: key, source, selectables, level: 0 };
62
- switch (changeType) {
63
- case "add":
64
- storage.addToSelection(actionProps);
65
- return;
66
- case "remove":
67
- storage.removeFromSelection(actionProps);
68
- return;
69
- case "replace":
70
- storage.replaceSelection(actionProps);
71
- return;
57
+ Object.entries(groupNodeSelectablesByIModelKey(node)).forEach(([imodelKey, nodeSelectables]) => {
58
+ let selectablesList = imodelSelectables[imodelKey];
59
+ if (!selectablesList) {
60
+ selectablesList = [];
61
+ imodelSelectables[imodelKey] = selectablesList;
62
+ }
63
+ nodeSelectables.forEach((selectable) => selectablesList.push(selectable));
64
+ });
72
65
  }
66
+ Object.entries(imodelSelectables).forEach(([imodelKey, selectables]) => {
67
+ const actionProps = { imodelKey, source, selectables, level: 0 };
68
+ switch (changeType) {
69
+ case "add":
70
+ storage.addToSelection(actionProps);
71
+ return;
72
+ case "remove":
73
+ storage.removeFromSelection(actionProps);
74
+ return;
75
+ case "replace":
76
+ storage.replaceSelection(actionProps);
77
+ return;
78
+ }
79
+ });
73
80
  },
74
81
  };
75
82
  }
76
- function createSelectables(nodeId, node) {
77
- if (presentation_hierarchies_1.HierarchyNode.isInstancesNode(node)) {
78
- return node.key.instanceKeys;
83
+ function groupNodeSelectablesByIModelKey(modelNode) {
84
+ const hierarchyNode = modelNode.nodeData;
85
+ if (presentation_hierarchies_1.HierarchyNode.isGeneric(hierarchyNode)) {
86
+ return {
87
+ // note: generic nodes aren't associated with an imodel
88
+ [""]: [
89
+ {
90
+ identifier: modelNode.id,
91
+ data: hierarchyNode,
92
+ async *loadInstanceKeys() { },
93
+ },
94
+ ],
95
+ };
79
96
  }
80
- return [
81
- {
82
- identifier: nodeId,
83
- async *loadInstanceKeys() {
84
- if (!presentation_hierarchies_1.HierarchyNode.isGroupingNode(node)) {
85
- return;
86
- }
87
- for (const key of node.groupedInstanceKeys) {
88
- yield key;
89
- }
90
- },
91
- data: node,
92
- },
93
- ];
97
+ if (presentation_hierarchies_1.HierarchyNode.isInstancesNode(hierarchyNode)) {
98
+ return groupIModelInstanceKeys(hierarchyNode.key.instanceKeys);
99
+ }
100
+ if (presentation_hierarchies_1.HierarchyNode.isGroupingNode(hierarchyNode)) {
101
+ return Object.entries(groupIModelInstanceKeys(hierarchyNode.groupedInstanceKeys)).reduce((imodelSelectables, [imodelKey, instanceKeys]) => ({
102
+ ...imodelSelectables,
103
+ [imodelKey]: [
104
+ {
105
+ identifier: modelNode.id,
106
+ data: hierarchyNode,
107
+ async *loadInstanceKeys() {
108
+ for (const key of instanceKeys) {
109
+ yield key;
110
+ }
111
+ },
112
+ },
113
+ ],
114
+ }), {});
115
+ }
116
+ // istanbul ignore next
117
+ return {};
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
+ }, {});
94
130
  }
95
131
  //# sourceMappingURL=UseUnifiedSelection.js.map
@@ -1 +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/** @beta */\nexport interface UseUnifiedTreeSelectionProps {\n /** Key of the iModel. */\n imodelKey: string;\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/** @internal */\nexport function useUnifiedTreeSelection({\n imodelKey,\n sourceName,\n getNode,\n}: UseUnifiedTreeSelectionProps & { getNode: (nodeId: string) => TreeModelNode | TreeModelRootNode | undefined }): 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"]}
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, InstancesNodeKey } from \"@itwin/presentation-hierarchies\";\nimport { InstanceKey } from \"@itwin/presentation-shared\";\nimport { Selectable, Selectables, SelectionStorage } from \"@itwin/unified-selection\";\nimport { useUnifiedSelectionContext } from \"../UnifiedSelectionContext\";\nimport { SelectionChangeType } from \"../UseSelectionHandler\";\nimport { isTreeModelHierarchyNode, TreeModelHierarchyNode, 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/** @beta */\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/** @internal */\nexport function useUnifiedTreeSelection({\n sourceName,\n getNode,\n}: UseUnifiedTreeSelectionProps & { getNode: (nodeId: string) => TreeModelNode | TreeModelRootNode | undefined }): 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(sourceName, selectionStorage, getNode));\n return selectionStorage.selectionChangeEvent.addListener((args) => {\n if (args.level > 0) {\n return;\n }\n setOptions(createOptions(sourceName, selectionStorage, getNode));\n });\n }, [selectionStorage, getNode, 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.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 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 // istanbul ignore next\n return {};\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"]}
@@ -13,7 +13,7 @@ function createNodeId(node) {
13
13
  return [...node.parentKeys.map(serializeNodeKey), serializeNodeKey(node.key)].join(";");
14
14
  }
15
15
  function serializeNodeKey(key) {
16
- return presentation_hierarchies_1.HierarchyNodeKey.isCustom(key) ? key : convertObjectValuesToString(key);
16
+ return convertObjectValuesToString(key);
17
17
  }
18
18
  function convertObjectValuesToString(obj) {
19
19
  return Object.entries(obj)
@@ -1 +1 @@
1
- {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/internal/Utils.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAKhG,oCAEC;AAkBD,8BAeC;AAtCD,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;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;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"]}
1
+ {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/internal/Utils.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAKhG,oCAEC;AAkBD,8BAeC;AAtCD,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;AAED,SAAS,gBAAgB,CAAC,GAAqB;IAC7C,OAAO,2BAA2B,CAAC,GAAG,CAAC,CAAC;AAC1C,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;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 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"]}
@@ -2,6 +2,7 @@ export { PresentationGenericInfoNode, PresentationHierarchyNode, PresentationInf
2
2
  export { UnifiedSelectionProvider } from "./presentation-hierarchies-react/UnifiedSelectionContext";
3
3
  export { useSelectionHandler } from "./presentation-hierarchies-react/UseSelectionHandler";
4
4
  export { HierarchyLevelDetails, useTree, useUnifiedSelectionTree } from "./presentation-hierarchies-react/UseTree";
5
+ export { useIModelTree, useIModelUnifiedSelectionTree } from "./presentation-hierarchies-react/UseIModelTree";
5
6
  export { TreeNodeRenderer } from "./presentation-hierarchies-react/itwinui/TreeNodeRenderer";
6
7
  export { RenderedTreeNode, TreeRenderer, createRenderedTreeNodeData } from "./presentation-hierarchies-react/itwinui/TreeRenderer";
7
8
  export { LocalizationContextProvider } from "./presentation-hierarchies-react/itwinui/LocalizationContext";
@@ -1 +1 @@
1
- {"version":3,"file":"presentation-hierarchies-react.d.ts","sourceRoot":"","sources":["../../src/presentation-hierarchies-react.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,oBAAoB,EACpB,qCAAqC,EACrC,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0DAA0D,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,MAAM,sDAAsD,CAAC;AAC3F,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnH,OAAO,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,0BAA0B,EAAE,MAAM,uDAAuD,CAAC;AACnI,OAAO,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAE3G,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAC1G,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"presentation-hierarchies-react.d.ts","sourceRoot":"","sources":["../../src/presentation-hierarchies-react.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,oBAAoB,EACpB,qCAAqC,EACrC,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0DAA0D,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,MAAM,sDAAsD,CAAC;AAC3F,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnH,OAAO,EAAE,aAAa,EAAE,6BAA6B,EAAE,MAAM,gDAAgD,CAAC;AAC9G,OAAO,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,0BAA0B,EAAE,MAAM,uDAAuD,CAAC;AACnI,OAAO,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAE3G,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAC1G,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -4,7 +4,7 @@
4
4
  * See LICENSE.md in the project root for license terms and full copyright notice.
5
5
  *--------------------------------------------------------------------------------------------*/
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.HierarchyNode = exports.GenericInstanceFilter = exports.LocalizationContextProvider = exports.createRenderedTreeNodeData = exports.TreeRenderer = exports.TreeNodeRenderer = exports.useUnifiedSelectionTree = exports.useTree = exports.useSelectionHandler = exports.UnifiedSelectionProvider = exports.isPresentationHierarchyNode = void 0;
7
+ exports.HierarchyNode = exports.GenericInstanceFilter = exports.LocalizationContextProvider = exports.createRenderedTreeNodeData = exports.TreeRenderer = exports.TreeNodeRenderer = exports.useIModelUnifiedSelectionTree = exports.useIModelTree = exports.useUnifiedSelectionTree = exports.useTree = exports.useSelectionHandler = exports.UnifiedSelectionProvider = exports.isPresentationHierarchyNode = void 0;
8
8
  var TreeNode_1 = require("./presentation-hierarchies-react/TreeNode");
9
9
  Object.defineProperty(exports, "isPresentationHierarchyNode", { enumerable: true, get: function () { return TreeNode_1.isPresentationHierarchyNode; } });
10
10
  var UnifiedSelectionContext_1 = require("./presentation-hierarchies-react/UnifiedSelectionContext");
@@ -14,6 +14,9 @@ Object.defineProperty(exports, "useSelectionHandler", { enumerable: true, get: f
14
14
  var UseTree_1 = require("./presentation-hierarchies-react/UseTree");
15
15
  Object.defineProperty(exports, "useTree", { enumerable: true, get: function () { return UseTree_1.useTree; } });
16
16
  Object.defineProperty(exports, "useUnifiedSelectionTree", { enumerable: true, get: function () { return UseTree_1.useUnifiedSelectionTree; } });
17
+ var UseIModelTree_1 = require("./presentation-hierarchies-react/UseIModelTree");
18
+ Object.defineProperty(exports, "useIModelTree", { enumerable: true, get: function () { return UseIModelTree_1.useIModelTree; } });
19
+ Object.defineProperty(exports, "useIModelUnifiedSelectionTree", { enumerable: true, get: function () { return UseIModelTree_1.useIModelUnifiedSelectionTree; } });
17
20
  var TreeNodeRenderer_1 = require("./presentation-hierarchies-react/itwinui/TreeNodeRenderer");
18
21
  Object.defineProperty(exports, "TreeNodeRenderer", { enumerable: true, get: function () { return TreeNodeRenderer_1.TreeNodeRenderer; } });
19
22
  var TreeRenderer_1 = require("./presentation-hierarchies-react/itwinui/TreeRenderer");
@@ -1 +1 @@
1
- {"version":3,"file":"presentation-hierarchies-react.js","sourceRoot":"","sources":["../../src/presentation-hierarchies-react.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG,sEAOmD;AADjD,uHAAA,2BAA2B,OAAA;AAE7B,oGAAoG;AAA3F,mIAAA,wBAAwB,OAAA;AACjC,4FAA2F;AAAlF,0HAAA,mBAAmB,OAAA;AAC5B,oEAAmH;AAAnF,kGAAA,OAAO,OAAA;AAAE,kHAAA,uBAAuB,OAAA;AAChE,8FAA6F;AAApF,oHAAA,gBAAgB,OAAA;AACzB,sFAAmI;AAAxG,4GAAA,YAAY,OAAA;AAAE,0HAAA,0BAA0B,OAAA;AACnE,oGAA2G;AAAlG,kIAAA,2BAA2B,OAAA;AAEpC,4EAA0G;AAAjG,iIAAA,qBAAqB,OAAA;AAAE,yHAAA,aAAa,OAAA","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nexport {\n PresentationGenericInfoNode,\n PresentationHierarchyNode,\n PresentationInfoNode,\n PresentationResultSetTooLargeInfoNode,\n PresentationTreeNode,\n isPresentationHierarchyNode,\n} from \"./presentation-hierarchies-react/TreeNode\";\nexport { UnifiedSelectionProvider } from \"./presentation-hierarchies-react/UnifiedSelectionContext\";\nexport { useSelectionHandler } from \"./presentation-hierarchies-react/UseSelectionHandler\";\nexport { HierarchyLevelDetails, useTree, useUnifiedSelectionTree } from \"./presentation-hierarchies-react/UseTree\";\nexport { TreeNodeRenderer } from \"./presentation-hierarchies-react/itwinui/TreeNodeRenderer\";\nexport { RenderedTreeNode, TreeRenderer, createRenderedTreeNodeData } from \"./presentation-hierarchies-react/itwinui/TreeRenderer\";\nexport { LocalizationContextProvider } from \"./presentation-hierarchies-react/itwinui/LocalizationContext\";\n\nexport { GenericInstanceFilter, HierarchyNode, HierarchyProvider } from \"@itwin/presentation-hierarchies\";\nexport { SelectionStorage } from \"@itwin/unified-selection\";\n"]}
1
+ {"version":3,"file":"presentation-hierarchies-react.js","sourceRoot":"","sources":["../../src/presentation-hierarchies-react.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG,sEAOmD;AADjD,uHAAA,2BAA2B,OAAA;AAE7B,oGAAoG;AAA3F,mIAAA,wBAAwB,OAAA;AACjC,4FAA2F;AAAlF,0HAAA,mBAAmB,OAAA;AAC5B,oEAAmH;AAAnF,kGAAA,OAAO,OAAA;AAAE,kHAAA,uBAAuB,OAAA;AAChE,gFAA8G;AAArG,8GAAA,aAAa,OAAA;AAAE,8HAAA,6BAA6B,OAAA;AACrD,8FAA6F;AAApF,oHAAA,gBAAgB,OAAA;AACzB,sFAAmI;AAAxG,4GAAA,YAAY,OAAA;AAAE,0HAAA,0BAA0B,OAAA;AACnE,oGAA2G;AAAlG,kIAAA,2BAA2B,OAAA;AAEpC,4EAA0G;AAAjG,iIAAA,qBAAqB,OAAA;AAAE,yHAAA,aAAa,OAAA","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nexport {\n PresentationGenericInfoNode,\n PresentationHierarchyNode,\n PresentationInfoNode,\n PresentationResultSetTooLargeInfoNode,\n PresentationTreeNode,\n isPresentationHierarchyNode,\n} from \"./presentation-hierarchies-react/TreeNode\";\nexport { UnifiedSelectionProvider } from \"./presentation-hierarchies-react/UnifiedSelectionContext\";\nexport { useSelectionHandler } from \"./presentation-hierarchies-react/UseSelectionHandler\";\nexport { HierarchyLevelDetails, useTree, useUnifiedSelectionTree } from \"./presentation-hierarchies-react/UseTree\";\nexport { useIModelTree, useIModelUnifiedSelectionTree } from \"./presentation-hierarchies-react/UseIModelTree\";\nexport { TreeNodeRenderer } from \"./presentation-hierarchies-react/itwinui/TreeNodeRenderer\";\nexport { RenderedTreeNode, TreeRenderer, createRenderedTreeNodeData } from \"./presentation-hierarchies-react/itwinui/TreeRenderer\";\nexport { LocalizationContextProvider } from \"./presentation-hierarchies-react/itwinui/LocalizationContext\";\n\nexport { GenericInstanceFilter, HierarchyNode, HierarchyProvider } from \"@itwin/presentation-hierarchies\";\nexport { SelectionStorage } from \"@itwin/unified-selection\";\n"]}
@@ -0,0 +1,53 @@
1
+ import { createIModelHierarchyProvider, HierarchyDefinition, HierarchyFilteringPath } from "@itwin/presentation-hierarchies";
2
+ import { UseUnifiedTreeSelectionProps } from "./internal/UseUnifiedSelection";
3
+ import { UseTreeProps, UseTreeResult } from "./UseTree";
4
+ /** @beta */
5
+ type IModelHierarchyProviderProps = Parameters<typeof createIModelHierarchyProvider>[0];
6
+ /** @beta */
7
+ type IModelAccess = IModelHierarchyProviderProps["imodelAccess"];
8
+ /**
9
+ * Props for `useIModelTree` and `useIModelUnifiedSelectionTree` hooks.
10
+ * @beta
11
+ */
12
+ type UseIModelTreeProps = Omit<UseTreeProps, "getHierarchyProvider" | "getFilteredPaths"> & Pick<IModelHierarchyProviderProps, "localizedStrings" | "imodelAccess" | "imodelChanged"> & {
13
+ /** Provides the hierarchy definition for the tree. */
14
+ getHierarchyDefinition: (props: {
15
+ imodelAccess: IModelAccess;
16
+ }) => HierarchyDefinition;
17
+ /** Provides paths to filtered nodes. */
18
+ getFilteredPaths?: (props: {
19
+ /** Object that provides access to the iModel schema and can run queries against the iModel. */
20
+ imodelAccess: IModelAccess;
21
+ }) => Promise<HierarchyFilteringPath[] | undefined>;
22
+ };
23
+ /**
24
+ * A React hook that creates state for a tree component whose displayed hierarchy is based on
25
+ * iModel data.
26
+ *
27
+ * The hook uses `@itwin/presentation-hierarchies` package to load the hierarchy data and returns a
28
+ * component-agnostic result which may be used to render the hierarchy using any UI framework.
29
+ *
30
+ * See `README.md` for an example
31
+ *
32
+ * @see `useTree`
33
+ * @see `useIModelUnifiedSelectionTree`
34
+ * @beta
35
+ */
36
+ export declare function useIModelTree(props: UseIModelTreeProps): UseTreeResult;
37
+ /**
38
+ * A React hook that creates state for a tree component whose displayed hierarchy is based on
39
+ * iModel data and that is integrated with unified selection through context provided by `UnifiedSelectionProvider`.
40
+ *
41
+ * The hook uses `@itwin/presentation-hierarchies` package to load the hierarchy data and returns a
42
+ * component-agnostic result which may be used to render the hierarchy using any UI framework.
43
+ *
44
+ * See `README.md` for an example
45
+ *
46
+ * @see `useIModelTree`
47
+ * @see `useUnifiedSelectionTree`
48
+ * @see `UnifiedSelectionProvider`
49
+ * @beta
50
+ */
51
+ export declare function useIModelUnifiedSelectionTree(props: UseIModelTreeProps & UseUnifiedTreeSelectionProps): UseTreeResult;
52
+ export {};
53
+ //# sourceMappingURL=UseIModelTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UseIModelTree.d.ts","sourceRoot":"","sources":["../../../src/presentation-hierarchies-react/UseIModelTree.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC7H,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAW,YAAY,EAAE,aAAa,EAA2B,MAAM,WAAW,CAAC;AAE1F,YAAY;AACZ,KAAK,4BAA4B,GAAG,UAAU,CAAC,OAAO,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC;AAExF,YAAY;AACZ,KAAK,YAAY,GAAG,4BAA4B,CAAC,cAAc,CAAC,CAAC;AAEjE;;;GAGG;AACH,KAAK,kBAAkB,GAAG,IAAI,CAAC,YAAY,EAAE,sBAAsB,GAAG,kBAAkB,CAAC,GACvF,IAAI,CAAC,4BAA4B,EAAE,kBAAkB,GAAG,cAAc,GAAG,eAAe,CAAC,GAAG;IAC1F,sDAAsD;IACtD,sBAAsB,EAAE,CAAC,KAAK,EAAE;QAAE,YAAY,EAAE,YAAY,CAAA;KAAE,KAAK,mBAAmB,CAAC;IAEvF,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE;QACzB,+FAA+F;QAC/F,YAAY,EAAE,YAAY,CAAC;KAC5B,KAAK,OAAO,CAAC,sBAAsB,EAAE,GAAG,SAAS,CAAC,CAAC;CACrD,CAAC;AAEJ;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CAMtE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,kBAAkB,GAAG,4BAA4B,GAAG,aAAa,CAMrH"}
@@ -0,0 +1,61 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { useCallback } from "react";
6
+ import { createIModelHierarchyProvider } from "@itwin/presentation-hierarchies";
7
+ import { useTree, useUnifiedSelectionTree } from "./UseTree";
8
+ /**
9
+ * A React hook that creates state for a tree component whose displayed hierarchy is based on
10
+ * iModel data.
11
+ *
12
+ * The hook uses `@itwin/presentation-hierarchies` package to load the hierarchy data and returns a
13
+ * component-agnostic result which may be used to render the hierarchy using any UI framework.
14
+ *
15
+ * See `README.md` for an example
16
+ *
17
+ * @see `useTree`
18
+ * @see `useIModelUnifiedSelectionTree`
19
+ * @beta
20
+ */
21
+ export function useIModelTree(props) {
22
+ const { imodelAccess, imodelChanged, getHierarchyDefinition, getFilteredPaths, localizedStrings, ...rest } = props;
23
+ return useTree({
24
+ ...rest,
25
+ ...useIModelTreeProps({ imodelAccess, imodelChanged, getHierarchyDefinition, getFilteredPaths, localizedStrings }),
26
+ });
27
+ }
28
+ /**
29
+ * A React hook that creates state for a tree component whose displayed hierarchy is based on
30
+ * iModel data and that is integrated with unified selection through context provided by `UnifiedSelectionProvider`.
31
+ *
32
+ * The hook uses `@itwin/presentation-hierarchies` package to load the hierarchy data and returns a
33
+ * component-agnostic result which may be used to render the hierarchy using any UI framework.
34
+ *
35
+ * See `README.md` for an example
36
+ *
37
+ * @see `useIModelTree`
38
+ * @see `useUnifiedSelectionTree`
39
+ * @see `UnifiedSelectionProvider`
40
+ * @beta
41
+ */
42
+ export function useIModelUnifiedSelectionTree(props) {
43
+ const { imodelAccess, imodelChanged, getHierarchyDefinition, getFilteredPaths, localizedStrings, ...rest } = props;
44
+ return useUnifiedSelectionTree({
45
+ ...rest,
46
+ ...useIModelTreeProps({ imodelAccess, imodelChanged, getHierarchyDefinition, getFilteredPaths, localizedStrings }),
47
+ });
48
+ }
49
+ function useIModelTreeProps(props) {
50
+ const { imodelAccess, imodelChanged, getHierarchyDefinition, getFilteredPaths, localizedStrings } = props;
51
+ return {
52
+ getHierarchyProvider: useCallback(() => createIModelHierarchyProvider({
53
+ imodelAccess,
54
+ imodelChanged,
55
+ hierarchyDefinition: getHierarchyDefinition({ imodelAccess }),
56
+ localizedStrings,
57
+ }), [imodelAccess, imodelChanged, getHierarchyDefinition, localizedStrings]),
58
+ getFilteredPaths: useCallback(async () => getFilteredPaths?.({ imodelAccess }), [imodelAccess, getFilteredPaths]),
59
+ };
60
+ }
61
+ //# sourceMappingURL=UseIModelTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UseIModelTree.js","sourceRoot":"","sources":["../../../src/presentation-hierarchies-react/UseIModelTree.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,6BAA6B,EAA+C,MAAM,iCAAiC,CAAC;AAE7H,OAAO,EAAE,OAAO,EAA+B,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAwB1F;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IACnH,OAAO,OAAO,CAAC;QACb,GAAG,IAAI;QACP,GAAG,kBAAkB,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;KACnH,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,6BAA6B,CAAC,KAAwD;IACpG,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IACnH,OAAO,uBAAuB,CAAC;QAC7B,GAAG,IAAI;QACP,GAAG,kBAAkB,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;KACnH,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAsI;IAEtI,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;IAC1G,OAAO;QACL,oBAAoB,EAAE,WAAW,CAC/B,GAAG,EAAE,CACH,6BAA6B,CAAC;YAC5B,YAAY;YACZ,aAAa;YACb,mBAAmB,EAAE,sBAAsB,CAAC,EAAE,YAAY,EAAE,CAAC;YAC7D,gBAAgB;SACjB,CAAC,EACJ,CAAC,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,gBAAgB,CAAC,CACxE;QACD,gBAAgB,EAAE,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC,gBAAgB,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;KAClH,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { useCallback } from \"react\";\nimport { createIModelHierarchyProvider, HierarchyDefinition, HierarchyFilteringPath } from \"@itwin/presentation-hierarchies\";\nimport { UseUnifiedTreeSelectionProps } from \"./internal/UseUnifiedSelection\";\nimport { useTree, UseTreeProps, UseTreeResult, useUnifiedSelectionTree } from \"./UseTree\";\n\n/** @beta */\ntype IModelHierarchyProviderProps = Parameters<typeof createIModelHierarchyProvider>[0];\n\n/** @beta */\ntype IModelAccess = IModelHierarchyProviderProps[\"imodelAccess\"];\n\n/**\n * Props for `useIModelTree` and `useIModelUnifiedSelectionTree` hooks.\n * @beta\n */\ntype UseIModelTreeProps = Omit<UseTreeProps, \"getHierarchyProvider\" | \"getFilteredPaths\"> &\n Pick<IModelHierarchyProviderProps, \"localizedStrings\" | \"imodelAccess\" | \"imodelChanged\"> & {\n /** Provides the hierarchy definition for the tree. */\n getHierarchyDefinition: (props: { imodelAccess: IModelAccess }) => HierarchyDefinition;\n\n /** Provides paths to filtered nodes. */\n getFilteredPaths?: (props: {\n /** Object that provides access to the iModel schema and can run queries against the iModel. */\n imodelAccess: IModelAccess;\n }) => Promise<HierarchyFilteringPath[] | undefined>;\n };\n\n/**\n * A React hook that creates state for a tree component whose displayed hierarchy is based on\n * iModel data.\n *\n * The hook uses `@itwin/presentation-hierarchies` package to load the hierarchy data and returns a\n * component-agnostic result which may be used to render the hierarchy using any UI framework.\n *\n * See `README.md` for an example\n *\n * @see `useTree`\n * @see `useIModelUnifiedSelectionTree`\n * @beta\n */\nexport function useIModelTree(props: UseIModelTreeProps): UseTreeResult {\n const { imodelAccess, imodelChanged, getHierarchyDefinition, getFilteredPaths, localizedStrings, ...rest } = props;\n return useTree({\n ...rest,\n ...useIModelTreeProps({ imodelAccess, imodelChanged, getHierarchyDefinition, getFilteredPaths, localizedStrings }),\n });\n}\n\n/**\n * A React hook that creates state for a tree component whose displayed hierarchy is based on\n * iModel data and that is integrated with unified selection through context provided by `UnifiedSelectionProvider`.\n *\n * The hook uses `@itwin/presentation-hierarchies` package to load the hierarchy data and returns a\n * component-agnostic result which may be used to render the hierarchy using any UI framework.\n *\n * See `README.md` for an example\n *\n * @see `useIModelTree`\n * @see `useUnifiedSelectionTree`\n * @see `UnifiedSelectionProvider`\n * @beta\n */\nexport function useIModelUnifiedSelectionTree(props: UseIModelTreeProps & UseUnifiedTreeSelectionProps): UseTreeResult {\n const { imodelAccess, imodelChanged, getHierarchyDefinition, getFilteredPaths, localizedStrings, ...rest } = props;\n return useUnifiedSelectionTree({\n ...rest,\n ...useIModelTreeProps({ imodelAccess, imodelChanged, getHierarchyDefinition, getFilteredPaths, localizedStrings }),\n });\n}\n\nfunction useIModelTreeProps(\n props: Pick<UseIModelTreeProps, \"imodelAccess\" | \"imodelChanged\" | \"getHierarchyDefinition\" | \"getFilteredPaths\" | \"localizedStrings\">,\n): Pick<UseTreeProps, \"getHierarchyProvider\" | \"getFilteredPaths\"> {\n const { imodelAccess, imodelChanged, getHierarchyDefinition, getFilteredPaths, localizedStrings } = props;\n return {\n getHierarchyProvider: useCallback(\n () =>\n createIModelHierarchyProvider({\n imodelAccess,\n imodelChanged,\n hierarchyDefinition: getHierarchyDefinition({ imodelAccess }),\n localizedStrings,\n }),\n [imodelAccess, imodelChanged, getHierarchyDefinition, localizedStrings],\n ),\n getFilteredPaths: useCallback(async () => getFilteredPaths?.({ imodelAccess }), [imodelAccess, getFilteredPaths]),\n };\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { createHierarchyProvider, GenericInstanceFilter, HierarchyDefinition, HierarchyNode, LimitingECSqlQueryExecutor } from "@itwin/presentation-hierarchies";
2
- import { ECClassHierarchyInspector, ECSchemaProvider, InstanceKey, IPrimitiveValueFormatter } from "@itwin/presentation-shared";
1
+ import { GenericInstanceFilter, HierarchyFilteringPath, HierarchyNode, HierarchyProvider } from "@itwin/presentation-hierarchies";
2
+ import { InstanceKey, IPrimitiveValueFormatter } from "@itwin/presentation-shared";
3
3
  import { UseUnifiedTreeSelectionProps } from "./internal/UseUnifiedSelection";
4
4
  import { PresentationTreeNode } from "./TreeNode";
5
5
  import { SelectionChangeType } from "./UseSelectionHandler";
@@ -33,6 +33,7 @@ export interface HierarchyLevelDetails {
33
33
  * See `README.md` for an example
34
34
  *
35
35
  * @see `useUnifiedSelectionTree`
36
+ * @see `useIModelTree`
36
37
  * @beta
37
38
  */
38
39
  export declare function useTree(props: UseTreeProps): UseTreeResult;
@@ -46,31 +47,17 @@ export declare function useTree(props: UseTreeProps): UseTreeResult;
46
47
  * See `README.md` for an example
47
48
  *
48
49
  * @see `useTree`
50
+ * @see `useIModelUnifiedSelectionTree`
49
51
  * @see `UnifiedSelectionProvider`
50
52
  * @beta
51
53
  */
52
- export declare function useUnifiedSelectionTree({ imodelKey, sourceName, ...props }: UseTreeProps & UseUnifiedTreeSelectionProps): UseTreeResult;
54
+ export declare function useUnifiedSelectionTree({ sourceName, ...props }: UseTreeProps & UseUnifiedTreeSelectionProps): UseTreeResult;
53
55
  /** @beta */
54
- type IModelAccess = ECSchemaProvider & LimitingECSqlQueryExecutor & ECClassHierarchyInspector;
55
- /** @beta */
56
- interface GetFilteredPathsProps {
57
- /** Object that provides access to the iModel schema and can run queries against the iModel. */
58
- imodelAccess: IModelAccess;
59
- }
60
- /** @beta */
61
- type HierarchyProviderProps = Parameters<typeof createHierarchyProvider>[0];
62
- /** @beta */
63
- type HierarchyFilteringPaths = NonNullable<NonNullable<HierarchyProviderProps["filtering"]>["paths"]>;
64
- /** @beta */
65
- interface UseTreeProps extends Pick<HierarchyProviderProps, "localizedStrings"> {
66
- /** Object that provides access to the iModel schema and can run queries against the iModel. */
67
- imodelAccess: ECSchemaProvider & LimitingECSqlQueryExecutor & ECClassHierarchyInspector;
68
- /** Provides the hierarchy definition for the tree. */
69
- getHierarchyDefinition: (props: {
70
- imodelAccess: IModelAccess;
71
- }) => HierarchyDefinition;
56
+ export interface UseTreeProps {
57
+ /** Provides the hierarchy provider for the tree. */
58
+ getHierarchyProvider: () => HierarchyProvider;
72
59
  /** Provides paths to filtered nodes. */
73
- getFilteredPaths?: (props: GetFilteredPathsProps) => Promise<HierarchyFilteringPaths | undefined>;
60
+ getFilteredPaths?: () => Promise<HierarchyFilteringPath[] | undefined>;
74
61
  /**
75
62
  * Callback that is called just after a certain action is finished.
76
63
  * Can be used for performance tracking.
@@ -88,8 +75,13 @@ interface UseTreeProps extends Pick<HierarchyProviderProps, "localizedStrings">
88
75
  type: "timeout" | "unknown";
89
76
  }) => void;
90
77
  }
91
- /** @beta */
92
- interface ReloadTreeCommonOptions {
78
+ /**
79
+ * Options for doing either full or a sub tree reload.
80
+ * @beta
81
+ */
82
+ interface ReloadTreeOptions {
83
+ /** Specifies parent node under which sub tree should be reloaded. */
84
+ parentNodeId: string | undefined;
93
85
  /**
94
86
  * Specifies how current tree state should be handled:
95
87
  * - `keep` - try to keep current tree state (expanded/collapsed nodes, instance filters, etc.).
@@ -100,27 +92,6 @@ interface ReloadTreeCommonOptions {
100
92
  */
101
93
  state?: "keep" | "discard" | "reset";
102
94
  }
103
- /**
104
- * Options for full tree reload.
105
- * @beta
106
- */
107
- type FullTreeReloadOptions = {
108
- /** Specifies that data source changed and caches should be cleared before reloading tree. */
109
- dataSourceChanged?: true;
110
- } & ReloadTreeCommonOptions;
111
- /**
112
- * Options for subtree reload.
113
- * @beta
114
- */
115
- type SubtreeReloadOptions = {
116
- /** Specifies parent node under which sub tree should be reloaded. */
117
- parentNodeId: string;
118
- } & ReloadTreeCommonOptions;
119
- /**
120
- * Options for doing either full or a sub tree reload.
121
- * @beta
122
- */
123
- type ReloadTreeOptions = FullTreeReloadOptions | SubtreeReloadOptions;
124
95
  /** @beta */
125
96
  export interface UseTreeResult {
126
97
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"UseTree.d.ts","sourceRoot":"","sources":["../../../src/presentation-hierarchies-react/UseTree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UseTree.d.ts","sourceRoot":"","sources":["../../../src/presentation-hierarchies-react/UseTree.ts"],"names":[],"mappings":"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"}