@itwin/presentation-hierarchies-react 2.0.0-alpha.53 → 2.0.0-alpha.55

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 (181) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/README.md +23 -61
  3. package/lib/presentation-hierarchies-react/Renderers.d.ts +92 -0
  4. package/lib/presentation-hierarchies-react/Renderers.d.ts.map +1 -0
  5. package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/TreeNode.d.ts +33 -29
  6. package/lib/presentation-hierarchies-react/TreeNode.d.ts.map +1 -0
  7. package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/UseIModelTree.d.ts +28 -17
  8. package/lib/presentation-hierarchies-react/UseIModelTree.d.ts.map +1 -0
  9. package/lib/presentation-hierarchies-react/UseIModelTree.js +184 -0
  10. package/lib/presentation-hierarchies-react/UseIModelTree.js.map +1 -0
  11. package/lib/presentation-hierarchies-react/UseNodeHighlighting.d.ts +30 -0
  12. package/lib/presentation-hierarchies-react/UseNodeHighlighting.d.ts.map +1 -0
  13. package/lib/presentation-hierarchies-react/UseNodeHighlighting.js +58 -0
  14. package/lib/presentation-hierarchies-react/UseNodeHighlighting.js.map +1 -0
  15. package/lib/presentation-hierarchies-react/UseSelectionHandler.d.ts +25 -0
  16. package/lib/presentation-hierarchies-react/UseSelectionHandler.d.ts.map +1 -0
  17. package/lib/presentation-hierarchies-react/UseSelectionHandler.js +125 -0
  18. package/lib/presentation-hierarchies-react/UseSelectionHandler.js.map +1 -0
  19. package/lib/presentation-hierarchies-react/UseTree.d.ts +112 -0
  20. package/lib/presentation-hierarchies-react/UseTree.d.ts.map +1 -0
  21. package/lib/presentation-hierarchies-react/UseTree.js +294 -0
  22. package/lib/presentation-hierarchies-react/UseTree.js.map +1 -0
  23. package/lib/presentation-hierarchies-react/Utils.js +56 -0
  24. package/lib/presentation-hierarchies-react/Utils.js.map +1 -0
  25. package/lib/presentation-hierarchies-react/internal/DisposePolyfill.js +10 -0
  26. package/lib/presentation-hierarchies-react/internal/DisposePolyfill.js.map +1 -0
  27. package/lib/presentation-hierarchies-react/internal/LocalizedStrings.d.ts +9 -0
  28. package/lib/presentation-hierarchies-react/internal/LocalizedStrings.d.ts.map +1 -0
  29. package/lib/presentation-hierarchies-react/internal/LocalizedStrings.js +12 -0
  30. package/lib/presentation-hierarchies-react/internal/LocalizedStrings.js.map +1 -0
  31. package/lib/presentation-hierarchies-react/internal/TreeActions.js +295 -0
  32. package/lib/presentation-hierarchies-react/internal/TreeActions.js.map +1 -0
  33. package/lib/presentation-hierarchies-react/internal/TreeLoader.js +99 -0
  34. package/lib/presentation-hierarchies-react/internal/TreeLoader.js.map +1 -0
  35. package/lib/presentation-hierarchies-react/internal/TreeModel.d.ts +3 -0
  36. package/lib/presentation-hierarchies-react/internal/TreeModel.js +120 -0
  37. package/lib/presentation-hierarchies-react/internal/TreeModel.js.map +1 -0
  38. package/lib/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts +37 -0
  39. package/lib/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts.map +1 -0
  40. package/lib/presentation-hierarchies-react/internal/UseUnifiedSelection.js +142 -0
  41. package/lib/presentation-hierarchies-react/internal/UseUnifiedSelection.js.map +1 -0
  42. package/lib/presentation-hierarchies-react/internal/Utils.js +43 -0
  43. package/lib/presentation-hierarchies-react/internal/Utils.js.map +1 -0
  44. package/lib/presentation-hierarchies-react/stratakit/ErrorItemRenderer.d.ts +38 -0
  45. package/lib/presentation-hierarchies-react/stratakit/ErrorItemRenderer.d.ts.map +1 -0
  46. package/lib/presentation-hierarchies-react/stratakit/ErrorItemRenderer.js +381 -0
  47. package/lib/presentation-hierarchies-react/stratakit/ErrorItemRenderer.js.map +1 -0
  48. package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/FlatTreeNode.d.ts +16 -15
  49. package/lib/presentation-hierarchies-react/stratakit/FlatTreeNode.d.ts.map +1 -0
  50. package/lib/presentation-hierarchies-react/stratakit/FlatTreeNode.js +91 -0
  51. package/lib/presentation-hierarchies-react/stratakit/FlatTreeNode.js.map +1 -0
  52. package/lib/presentation-hierarchies-react/stratakit/LocalizationContext.d.ts +24 -0
  53. package/lib/presentation-hierarchies-react/stratakit/LocalizationContext.d.ts.map +1 -0
  54. package/lib/presentation-hierarchies-react/stratakit/LocalizationContext.js +41 -0
  55. package/lib/presentation-hierarchies-react/stratakit/LocalizationContext.js.map +1 -0
  56. package/lib/presentation-hierarchies-react/stratakit/RootErrorRenderer.d.ts +27 -0
  57. package/lib/presentation-hierarchies-react/stratakit/RootErrorRenderer.d.ts.map +1 -0
  58. package/lib/presentation-hierarchies-react/stratakit/RootErrorRenderer.js +186 -0
  59. package/lib/presentation-hierarchies-react/stratakit/RootErrorRenderer.js.map +1 -0
  60. package/lib/presentation-hierarchies-react/stratakit/TreeAction.d.ts +49 -0
  61. package/lib/presentation-hierarchies-react/stratakit/TreeAction.d.ts.map +1 -0
  62. package/lib/presentation-hierarchies-react/stratakit/TreeAction.js +89 -0
  63. package/lib/presentation-hierarchies-react/stratakit/TreeAction.js.map +1 -0
  64. package/lib/presentation-hierarchies-react/stratakit/TreeErrorRenderer.d.ts +38 -0
  65. package/lib/presentation-hierarchies-react/stratakit/TreeErrorRenderer.d.ts.map +1 -0
  66. package/lib/presentation-hierarchies-react/stratakit/TreeErrorRenderer.js +64 -0
  67. package/lib/presentation-hierarchies-react/stratakit/TreeErrorRenderer.js.map +1 -0
  68. package/lib/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.d.ts +29 -0
  69. package/lib/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.d.ts.map +1 -0
  70. package/lib/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.js +92 -0
  71. package/lib/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.js.map +1 -0
  72. package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.d.ts +33 -0
  73. package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.d.ts.map +1 -0
  74. package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.js +156 -0
  75. package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.js.map +1 -0
  76. package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.d.ts +18 -0
  77. package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.d.ts.map +1 -0
  78. package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.js +535 -0
  79. package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.js.map +1 -0
  80. package/lib/presentation-hierarchies-react/stratakit/TreeRenderer.d.ts +75 -0
  81. package/lib/presentation-hierarchies-react/stratakit/TreeRenderer.d.ts.map +1 -0
  82. package/lib/presentation-hierarchies-react/stratakit/TreeRenderer.js +418 -0
  83. package/lib/presentation-hierarchies-react/stratakit/TreeRenderer.js.map +1 -0
  84. package/lib/presentation-hierarchies-react.d.ts +18 -0
  85. package/lib/presentation-hierarchies-react.js +16 -0
  86. package/lib/public/locales/en/PresentationHierarchies_1.0.json +26 -0
  87. package/package.json +27 -21
  88. package/lib/esm/presentation-hierarchies-react/Renderers.d.ts +0 -85
  89. package/lib/esm/presentation-hierarchies-react/Renderers.d.ts.map +0 -1
  90. package/lib/esm/presentation-hierarchies-react/Renderers.js +0 -6
  91. package/lib/esm/presentation-hierarchies-react/Renderers.js.map +0 -1
  92. package/lib/esm/presentation-hierarchies-react/TreeNode.d.ts.map +0 -1
  93. package/lib/esm/presentation-hierarchies-react/TreeNode.js +0 -6
  94. package/lib/esm/presentation-hierarchies-react/TreeNode.js.map +0 -1
  95. package/lib/esm/presentation-hierarchies-react/UseIModelTree.d.ts.map +0 -1
  96. package/lib/esm/presentation-hierarchies-react/UseIModelTree.js +0 -62
  97. package/lib/esm/presentation-hierarchies-react/UseIModelTree.js.map +0 -1
  98. package/lib/esm/presentation-hierarchies-react/UseNodeHighlighting.d.ts +0 -24
  99. package/lib/esm/presentation-hierarchies-react/UseNodeHighlighting.d.ts.map +0 -1
  100. package/lib/esm/presentation-hierarchies-react/UseNodeHighlighting.js +0 -53
  101. package/lib/esm/presentation-hierarchies-react/UseNodeHighlighting.js.map +0 -1
  102. package/lib/esm/presentation-hierarchies-react/UseSelectionHandler.d.ts +0 -48
  103. package/lib/esm/presentation-hierarchies-react/UseSelectionHandler.d.ts.map +0 -1
  104. package/lib/esm/presentation-hierarchies-react/UseSelectionHandler.js +0 -83
  105. package/lib/esm/presentation-hierarchies-react/UseSelectionHandler.js.map +0 -1
  106. package/lib/esm/presentation-hierarchies-react/UseTree.d.ts +0 -94
  107. package/lib/esm/presentation-hierarchies-react/UseTree.d.ts.map +0 -1
  108. package/lib/esm/presentation-hierarchies-react/UseTree.js +0 -241
  109. package/lib/esm/presentation-hierarchies-react/UseTree.js.map +0 -1
  110. package/lib/esm/presentation-hierarchies-react/Utils.d.ts +0 -8
  111. package/lib/esm/presentation-hierarchies-react/Utils.d.ts.map +0 -1
  112. package/lib/esm/presentation-hierarchies-react/Utils.js +0 -39
  113. package/lib/esm/presentation-hierarchies-react/Utils.js.map +0 -1
  114. package/lib/esm/presentation-hierarchies-react/internal/DisposePolyfill.d.ts +0 -2
  115. package/lib/esm/presentation-hierarchies-react/internal/DisposePolyfill.d.ts.map +0 -1
  116. package/lib/esm/presentation-hierarchies-react/internal/DisposePolyfill.js +0 -11
  117. package/lib/esm/presentation-hierarchies-react/internal/DisposePolyfill.js.map +0 -1
  118. package/lib/esm/presentation-hierarchies-react/internal/TreeActions.d.ts +0 -53
  119. package/lib/esm/presentation-hierarchies-react/internal/TreeActions.d.ts.map +0 -1
  120. package/lib/esm/presentation-hierarchies-react/internal/TreeActions.js +0 -322
  121. package/lib/esm/presentation-hierarchies-react/internal/TreeActions.js.map +0 -1
  122. package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.d.ts +0 -62
  123. package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.d.ts.map +0 -1
  124. package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.js +0 -90
  125. package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.js.map +0 -1
  126. package/lib/esm/presentation-hierarchies-react/internal/TreeModel.d.ts +0 -47
  127. package/lib/esm/presentation-hierarchies-react/internal/TreeModel.d.ts.map +0 -1
  128. package/lib/esm/presentation-hierarchies-react/internal/TreeModel.js +0 -157
  129. package/lib/esm/presentation-hierarchies-react/internal/TreeModel.js.map +0 -1
  130. package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts +0 -42
  131. package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts.map +0 -1
  132. package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.js +0 -115
  133. package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.js.map +0 -1
  134. package/lib/esm/presentation-hierarchies-react/internal/Utils.d.ts +0 -23
  135. package/lib/esm/presentation-hierarchies-react/internal/Utils.d.ts.map +0 -1
  136. package/lib/esm/presentation-hierarchies-react/internal/Utils.js +0 -58
  137. package/lib/esm/presentation-hierarchies-react/internal/Utils.js.map +0 -1
  138. package/lib/esm/presentation-hierarchies-react/stratakit/ErrorItemRenderer.d.ts +0 -27
  139. package/lib/esm/presentation-hierarchies-react/stratakit/ErrorItemRenderer.d.ts.map +0 -1
  140. package/lib/esm/presentation-hierarchies-react/stratakit/ErrorItemRenderer.js +0 -74
  141. package/lib/esm/presentation-hierarchies-react/stratakit/ErrorItemRenderer.js.map +0 -1
  142. package/lib/esm/presentation-hierarchies-react/stratakit/FlatTreeNode.d.ts.map +0 -1
  143. package/lib/esm/presentation-hierarchies-react/stratakit/FlatTreeNode.js +0 -73
  144. package/lib/esm/presentation-hierarchies-react/stratakit/FlatTreeNode.js.map +0 -1
  145. package/lib/esm/presentation-hierarchies-react/stratakit/LocalizationContext.d.ts +0 -138
  146. package/lib/esm/presentation-hierarchies-react/stratakit/LocalizationContext.d.ts.map +0 -1
  147. package/lib/esm/presentation-hierarchies-react/stratakit/LocalizationContext.js +0 -47
  148. package/lib/esm/presentation-hierarchies-react/stratakit/LocalizationContext.js.map +0 -1
  149. package/lib/esm/presentation-hierarchies-react/stratakit/RootErrorRenderer.d.ts +0 -16
  150. package/lib/esm/presentation-hierarchies-react/stratakit/RootErrorRenderer.d.ts.map +0 -1
  151. package/lib/esm/presentation-hierarchies-react/stratakit/RootErrorRenderer.js +0 -42
  152. package/lib/esm/presentation-hierarchies-react/stratakit/RootErrorRenderer.js.map +0 -1
  153. package/lib/esm/presentation-hierarchies-react/stratakit/TreeAction.d.ts +0 -45
  154. package/lib/esm/presentation-hierarchies-react/stratakit/TreeAction.d.ts.map +0 -1
  155. package/lib/esm/presentation-hierarchies-react/stratakit/TreeAction.js +0 -36
  156. package/lib/esm/presentation-hierarchies-react/stratakit/TreeAction.js.map +0 -1
  157. package/lib/esm/presentation-hierarchies-react/stratakit/TreeErrorRenderer.d.ts +0 -30
  158. package/lib/esm/presentation-hierarchies-react/stratakit/TreeErrorRenderer.d.ts.map +0 -1
  159. package/lib/esm/presentation-hierarchies-react/stratakit/TreeErrorRenderer.js +0 -30
  160. package/lib/esm/presentation-hierarchies-react/stratakit/TreeErrorRenderer.js.map +0 -1
  161. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.d.ts +0 -20
  162. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.d.ts.map +0 -1
  163. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.js +0 -29
  164. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.js.map +0 -1
  165. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.d.ts +0 -57
  166. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.d.ts.map +0 -1
  167. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.js +0 -71
  168. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.js.map +0 -1
  169. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenderer.d.ts +0 -46
  170. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenderer.d.ts.map +0 -1
  171. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenderer.js +0 -133
  172. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenderer.js.map +0 -1
  173. package/lib/esm/presentation-hierarchies-react/stratakit/TreeRenderer.d.ts +0 -75
  174. package/lib/esm/presentation-hierarchies-react/stratakit/TreeRenderer.d.ts.map +0 -1
  175. package/lib/esm/presentation-hierarchies-react/stratakit/TreeRenderer.js +0 -193
  176. package/lib/esm/presentation-hierarchies-react/stratakit/TreeRenderer.js.map +0 -1
  177. package/lib/esm/presentation-hierarchies-react.d.ts +0 -17
  178. package/lib/esm/presentation-hierarchies-react.d.ts.map +0 -1
  179. package/lib/esm/presentation-hierarchies-react.js +0 -18
  180. package/lib/esm/presentation-hierarchies-react.js.map +0 -1
  181. /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/TreeNodeRenderer.css +0 -0
@@ -1,157 +0,0 @@
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
- /** @internal */
6
- export function isTreeModelHierarchyNode(node) {
7
- return "nodeData" in node && node.nodeData !== undefined;
8
- }
9
- /** @internal */
10
- export var TreeModel;
11
- (function (TreeModel) {
12
- function expandNode(model, nodeId, isExpanded) {
13
- const node = model.idToNode.get(nodeId);
14
- if (!node) {
15
- return "none";
16
- }
17
- node.isExpanded = isExpanded;
18
- if (!isExpanded) {
19
- return "none";
20
- }
21
- if (node.error?.type === "ChildrenLoad") {
22
- node.isLoading = true;
23
- // remove subtree if there `ChildrenLoad` error info in order to attempt reloading children
24
- TreeModel.removeSubTree(model, nodeId);
25
- return "reloadChildren";
26
- }
27
- if (!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
- return "none";
36
- }
37
- TreeModel.expandNode = expandNode;
38
- /** @internal */
39
- function addHierarchyPart(model, rootId, hierarchyPart) {
40
- removeSubTree(model, rootId);
41
- model.rootNode.error = hierarchyPart.rootNode.error;
42
- for (const [parentId, children] of hierarchyPart.parentChildMap) {
43
- model.parentChildMap.set(parentId, children);
44
- }
45
- for (const [nodeId, node] of hierarchyPart.idToNode) {
46
- model.idToNode.set(nodeId, node);
47
- }
48
- const parentNode = rootId !== undefined ? model.idToNode.get(rootId) : model.rootNode;
49
- /* c8 ignore next 3*/
50
- if (!parentNode) {
51
- return;
52
- }
53
- parentNode.isLoading = false;
54
- }
55
- TreeModel.addHierarchyPart = addHierarchyPart;
56
- function removeSubTree(model, parentId) {
57
- clearNodeError(model, parentId);
58
- const currentChildren = model.parentChildMap.get(parentId);
59
- if (!currentChildren) {
60
- return;
61
- }
62
- model.parentChildMap.delete(parentId);
63
- for (const childId of currentChildren) {
64
- const childNode = model.idToNode.get(childId);
65
- if (childNode) {
66
- removeSubTree(model, childNode.id);
67
- }
68
- model.idToNode.delete(childId);
69
- }
70
- }
71
- TreeModel.removeSubTree = removeSubTree;
72
- function setHierarchyLimit(model, nodeId, limit) {
73
- return updateForReload(model, nodeId, (node) => {
74
- node.hierarchyLimit = limit;
75
- });
76
- }
77
- TreeModel.setHierarchyLimit = setHierarchyLimit;
78
- function setInstanceFilter(model, nodeId, filter) {
79
- return updateForReload(model, nodeId, (node) => {
80
- if (filter && node.id !== undefined) {
81
- node.isExpanded = true;
82
- }
83
- node.instanceFilter = filter;
84
- });
85
- }
86
- TreeModel.setInstanceFilter = setInstanceFilter;
87
- function selectNodes(model, nodeIds, changeType) {
88
- if (changeType === "replace") {
89
- for (const [nodeId, node] of model.idToNode) {
90
- node.isSelected = !!nodeIds.find((id) => id === nodeId);
91
- }
92
- return;
93
- }
94
- for (const nodeId of nodeIds) {
95
- const modelNode = model.idToNode.get(nodeId);
96
- if (!modelNode) {
97
- return;
98
- }
99
- modelNode.isSelected = changeType === "add";
100
- }
101
- }
102
- TreeModel.selectNodes = selectNodes;
103
- function isNodeSelected(model, nodeId) {
104
- const currentNode = model.idToNode.get(nodeId);
105
- return !!currentNode && !!currentNode.isSelected;
106
- }
107
- TreeModel.isNodeSelected = isNodeSelected;
108
- function getNode(model, nodeId) {
109
- if (!nodeId) {
110
- return model.rootNode;
111
- }
112
- return model.idToNode.get(nodeId);
113
- }
114
- TreeModel.getNode = getNode;
115
- function setIsLoading(model, nodeId, isLoading) {
116
- if (nodeId === undefined) {
117
- model.rootNode.isLoading = isLoading;
118
- return;
119
- }
120
- const modelNode = model.idToNode.get(nodeId);
121
- /* c8 ignore next 3*/
122
- if (!modelNode) {
123
- return;
124
- }
125
- modelNode.isLoading = isLoading;
126
- }
127
- TreeModel.setIsLoading = setIsLoading;
128
- })(TreeModel || (TreeModel = {}));
129
- function updateForReload(model, nodeId, update) {
130
- TreeModel.removeSubTree(model, nodeId);
131
- if (nodeId === undefined) {
132
- update(model.rootNode);
133
- model.rootNode.isLoading = true;
134
- return true;
135
- }
136
- const modelNode = model.idToNode.get(nodeId);
137
- if (!modelNode) {
138
- return false;
139
- }
140
- update(modelNode);
141
- if (modelNode.isExpanded) {
142
- modelNode.isLoading = true;
143
- return true;
144
- }
145
- return false;
146
- }
147
- function clearNodeError(model, parentId) {
148
- if (!parentId) {
149
- return (model.rootNode.error = undefined);
150
- }
151
- const node = model.idToNode.get(parentId);
152
- if (!node) {
153
- return;
154
- }
155
- node.error = undefined;
156
- }
157
- //# sourceMappingURL=TreeModel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TreeModel.js","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/internal/TreeModel.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AA8BhG,gBAAgB;AAChB,MAAM,UAAU,wBAAwB,CAAC,IAA4D;IACnG,OAAO,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC;AAC3D,CAAC;AASD,gBAAgB;AAChB,MAAM,KAAW,SAAS,CA6HzB;AA7HD,WAAiB,SAAS;IACxB,SAAgB,UAAU,CAAC,KAAgB,EAAE,MAAc,EAAE,UAAmB;QAC9E,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,KAAK,cAAc,EAAE,CAAC;YACxC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,2FAA2F;YAC3F,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACvC,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IA7Be,oBAAU,aA6BzB,CAAA;IAED,gBAAgB;IAChB,SAAgB,gBAAgB,CAAC,KAAgB,EAAE,MAA0B,EAAE,aAAwB;QACrG,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7B,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC;QAEpD,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,aAAa,CAAC,cAAc,EAAE,CAAC;YAChE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAED,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;YACpD,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QACtF,qBAAqB;QACrB,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QACD,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC;IAC/B,CAAC;IAlBe,0BAAgB,mBAkB/B,CAAA;IAED,SAAgB,aAAa,CAAC,KAAgB,EAAE,QAA4B;QAC1E,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAChC,MAAM,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QACD,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEtC,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,SAAS,EAAE,CAAC;gBACd,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;YACrC,CAAC;YACD,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAfe,uBAAa,gBAe5B,CAAA;IAED,SAAgB,iBAAiB,CAAC,KAAgB,EAAE,MAA0B,EAAE,KAA4B;QAC1G,OAAO,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC7C,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC;IAJe,2BAAiB,oBAIhC,CAAA;IAED,SAAgB,iBAAiB,CAAC,KAAgB,EAAE,MAA0B,EAAE,MAA8B;QAC5G,OAAO,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC7C,IAAI,MAAM,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;gBACpC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACzB,CAAC;YACD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAPe,2BAAiB,oBAOhC,CAAA;IAED,SAAgB,WAAW,CAAC,KAAgB,EAAE,OAAsB,EAAE,UAA+B;QACnG,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC5C,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO;QACT,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YACD,SAAS,CAAC,UAAU,GAAG,UAAU,KAAK,KAAK,CAAC;QAC9C,CAAC;IACH,CAAC;IAde,qBAAW,cAc1B,CAAA;IAED,SAAgB,cAAc,CAAC,KAAgB,EAAE,MAAc;QAC7D,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC;IACnD,CAAC;IAHe,wBAAc,iBAG7B,CAAA;IAED,SAAgB,OAAO,CAAC,KAAgB,EAAE,MAA0B;QAClE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC,QAAQ,CAAC;QACxB,CAAC;QACD,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IALe,iBAAO,UAKtB,CAAA;IAED,SAAgB,YAAY,CAAC,KAAgB,EAAE,MAA0B,EAAE,SAAkB;QAC3F,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,KAAK,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;YACrC,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,qBAAqB;QACrB,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QACD,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;IAClC,CAAC;IAXe,sBAAY,eAW3B,CAAA;AACH,CAAC,EA7HgB,SAAS,KAAT,SAAS,QA6HzB;AAED,SAAS,eAAe,CAAC,KAAgB,EAAE,MAA0B,EAAE,MAAkE;IACvI,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACvC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvB,KAAK,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,CAAC;IAClB,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;QACzB,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,KAAgB,EAAE,QAA4B;IACpE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;IACT,CAAC;IACD,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;AACzB,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 { GenericInstanceFilter, HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { ErrorInfo } from \"../TreeNode.js\";\nimport { SelectionChangeType } from \"../UseSelectionHandler.js\";\n\n/** @internal */\nexport interface TreeModelRootNode {\n id: undefined;\n nodeData: undefined;\n hierarchyLimit?: number | \"unbounded\";\n instanceFilter?: GenericInstanceFilter;\n isLoading?: boolean;\n error?: ErrorInfo;\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 error?: ErrorInfo;\n}\n\n/** @internal */\nexport function isTreeModelHierarchyNode(node: TreeModelHierarchyNode | ErrorInfo | TreeModelRootNode): node is TreeModelHierarchyNode {\n return \"nodeData\" in node && node.nodeData !== undefined;\n}\n\n/** @internal */\nexport interface TreeModel {\n parentChildMap: Map<string | undefined, string[]>;\n idToNode: Map<string, TreeModelHierarchyNode>;\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) {\n return \"none\";\n }\n\n node.isExpanded = isExpanded;\n if (!isExpanded) {\n return \"none\";\n }\n\n if (node.error?.type === \"ChildrenLoad\") {\n node.isLoading = true;\n // remove subtree if there `ChildrenLoad` error info in order to attempt reloading children\n TreeModel.removeSubTree(model, nodeId);\n return \"reloadChildren\";\n }\n\n if (!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 return \"none\";\n }\n\n /** @internal */\n export function addHierarchyPart(model: TreeModel, rootId: string | undefined, hierarchyPart: TreeModel): void {\n removeSubTree(model, rootId);\n model.rootNode.error = hierarchyPart.rootNode.error;\n\n for (const [parentId, children] of hierarchyPart.parentChildMap) {\n model.parentChildMap.set(parentId, children);\n }\n\n for (const [nodeId, node] of hierarchyPart.idToNode) {\n model.idToNode.set(nodeId, node);\n }\n\n const parentNode = rootId !== undefined ? model.idToNode.get(rootId) : model.rootNode;\n /* c8 ignore next 3*/\n if (!parentNode) {\n return;\n }\n parentNode.isLoading = false;\n }\n\n export function removeSubTree(model: TreeModel, parentId: string | undefined): void {\n clearNodeError(model, parentId);\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) {\n removeSubTree(model, childNode.id);\n }\n model.idToNode.delete(childId);\n }\n }\n\n export function setHierarchyLimit(model: TreeModel, nodeId: string | undefined, limit?: number | \"unbounded\"): boolean {\n return updateForReload(model, nodeId, (node) => {\n node.hierarchyLimit = limit;\n });\n }\n\n export function setInstanceFilter(model: TreeModel, nodeId: string | undefined, filter?: GenericInstanceFilter): boolean {\n return updateForReload(model, nodeId, (node) => {\n if (filter && node.id !== undefined) {\n node.isExpanded = true;\n }\n node.instanceFilter = filter;\n });\n }\n\n export function selectNodes(model: TreeModel, nodeIds: Array<string>, changeType: SelectionChangeType) {\n if (changeType === \"replace\") {\n for (const [nodeId, node] of model.idToNode) {\n 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) {\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 && !!currentNode.isSelected;\n }\n\n export function getNode(model: TreeModel, nodeId: string | undefined): TreeModelHierarchyNode | TreeModelRootNode | undefined {\n if (!nodeId) {\n return model.rootNode;\n }\n return model.idToNode.get(nodeId);\n }\n\n export function setIsLoading(model: TreeModel, nodeId: string | undefined, isLoading: boolean) {\n if (nodeId === undefined) {\n model.rootNode.isLoading = isLoading;\n return;\n }\n const modelNode = model.idToNode.get(nodeId);\n /* c8 ignore next 3*/\n if (!modelNode) {\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) {\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\nfunction clearNodeError(model: TreeModel, parentId: string | undefined) {\n if (!parentId) {\n return (model.rootNode.error = undefined);\n }\n const node = model.idToNode.get(parentId);\n if (!node) {\n return;\n }\n node.error = undefined;\n}\n"]}
@@ -1,42 +0,0 @@
1
- import { GenericNodeKey, NonGroupingHierarchyNode } from "@itwin/presentation-hierarchies";
2
- import { Selectable, SelectionStorage } from "@itwin/unified-selection";
3
- import { SelectionChangeType } from "../UseSelectionHandler.js";
4
- import { TreeModelHierarchyNode, TreeModelRootNode } from "./TreeModel.js";
5
- /** @internal */
6
- export interface TreeSelectionOptions {
7
- isNodeSelected: (nodeId: string) => boolean;
8
- selectNodes: (nodeIds: Array<string>, changeType: SelectionChangeType) => void;
9
- }
10
- /** @public */
11
- export interface UseUnifiedTreeSelectionProps {
12
- /**
13
- * Identifier to distinguish this source of changes to the unified selection from another ones in the application.
14
- */
15
- sourceName: string;
16
- /**
17
- * An optional function that allows customizing the `Selectable` object that gets created for generic hierarchy nodes. When
18
- * not supplied, the `Selectable` is created using the following signature:
19
- * ```ts
20
- * {
21
- * identifier: treeModelNodeId,
22
- * data: node,
23
- * async *loadInstanceKeys() {},
24
- * }
25
- * ```
26
- *
27
- * @param node Hierarchy node to create a selectable for.
28
- * @param treeModelNodeId ID of the hierarchy node in the internal tree model. This ID uniquely identifies the node in the whole hierarchy, as opposed to `GenericNodeKey.id` contained within the `node`, which may not be unique.
29
- */
30
- createSelectableForGenericNode?: (node: NonGroupingHierarchyNode & {
31
- key: GenericNodeKey;
32
- }, treeModelNodeId: string) => Selectable;
33
- /**
34
- * Unified selection storage to use for listening, getting and changing active selection.
35
- */
36
- selectionStorage: SelectionStorage;
37
- }
38
- /** @internal */
39
- export declare function useUnifiedTreeSelection({ sourceName, selectionStorage, getTreeModelNode, createSelectableForGenericNode, }: UseUnifiedTreeSelectionProps & {
40
- getTreeModelNode: (nodeId: string) => TreeModelHierarchyNode | TreeModelRootNode | undefined;
41
- }): TreeSelectionOptions;
42
- //# sourceMappingURL=UseUnifiedSelection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UseUnifiedSelection.d.ts","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/internal/UseUnifiedSelection.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAmC,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAE5H,OAAO,EAAE,UAAU,EAAe,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE3E,gBAAgB;AAChB,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,WAAW,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAChF;AAED,cAAc;AACd,MAAM,WAAW,4BAA4B;IAC3C;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;;;;;;;;;;OAaG;IACH,8BAA8B,CAAC,EAAE,CAAC,IAAI,EAAE,wBAAwB,GAAG;QAAE,GAAG,EAAE,cAAc,CAAA;KAAE,EAAE,eAAe,EAAE,MAAM,KAAK,UAAU,CAAC;IAEnI;;OAEG;IACH,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,gBAAgB;AAChB,wBAAgB,uBAAuB,CAAC,EACtC,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,8BAAsE,GACvE,EAAE,4BAA4B,GAAG;IAAE,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,sBAAsB,GAAG,iBAAiB,GAAG,SAAS,CAAA;CAAE,GAAG,oBAAoB,CAiBxJ"}
@@ -1,115 +0,0 @@
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 { useEffect, useState } from "react";
6
- import { assert } from "@itwin/core-bentley";
7
- import { HierarchyNode } from "@itwin/presentation-hierarchies";
8
- import { Selectables } from "@itwin/unified-selection";
9
- /** @internal */
10
- export function useUnifiedTreeSelection({ sourceName, selectionStorage, getTreeModelNode, createSelectableForGenericNode = defaultCreateSelectableForGenericNode, }) {
11
- const [options, setOptions] = useState(() => ({
12
- isNodeSelected: /* c8 ignore next */ () => false,
13
- selectNodes: /* c8 ignore next */ () => { },
14
- }));
15
- useEffect(() => {
16
- setOptions(createOptions(sourceName, selectionStorage, createSelectableForGenericNode, getTreeModelNode));
17
- return selectionStorage.selectionChangeEvent.addListener((args) => {
18
- if (args.level > 0) {
19
- return;
20
- }
21
- setOptions(createOptions(sourceName, selectionStorage, createSelectableForGenericNode, getTreeModelNode));
22
- });
23
- }, [selectionStorage, createSelectableForGenericNode, getTreeModelNode, sourceName]);
24
- return options;
25
- }
26
- const defaultCreateSelectableForGenericNode = (node, treeModelNodeId) => ({
27
- identifier: treeModelNodeId,
28
- data: node,
29
- async *loadInstanceKeys() { },
30
- });
31
- function createOptions(source, storage, createSelectableForGenericNode, getNode) {
32
- return {
33
- isNodeSelected: (nodeId) => {
34
- const node = getNode(nodeId);
35
- if (!node || node?.id === undefined) {
36
- return false;
37
- }
38
- return Object.entries(groupNodeSelectablesByIModelKey(node, createSelectableForGenericNode)).some(([imodelKey, nodeSelectables]) => {
39
- const storageSelectables = storage.getSelection({ imodelKey, level: 0 });
40
- return Selectables.hasAny(storageSelectables, nodeSelectables);
41
- });
42
- },
43
- selectNodes: (nodeIds, changeType) => {
44
- const imodelSelectables = {};
45
- for (const nodeId of nodeIds) {
46
- const node = getNode(nodeId);
47
- if (!node || node?.id === undefined) {
48
- return;
49
- }
50
- Object.entries(groupNodeSelectablesByIModelKey(node, createSelectableForGenericNode)).forEach(([imodelKey, nodeSelectables]) => {
51
- let selectablesList = imodelSelectables[imodelKey];
52
- if (!selectablesList) {
53
- selectablesList = [];
54
- imodelSelectables[imodelKey] = selectablesList;
55
- }
56
- nodeSelectables.forEach((selectable) => selectablesList.push(selectable));
57
- });
58
- }
59
- Object.entries(imodelSelectables).forEach(([imodelKey, selectables]) => {
60
- const actionProps = { imodelKey, source, selectables, level: 0 };
61
- switch (changeType) {
62
- case "add":
63
- storage.addToSelection(actionProps);
64
- return;
65
- case "remove":
66
- storage.removeFromSelection(actionProps);
67
- return;
68
- case "replace":
69
- storage.replaceSelection(actionProps);
70
- return;
71
- }
72
- });
73
- },
74
- };
75
- }
76
- function groupNodeSelectablesByIModelKey(modelNode, createSelectableForGenericNode) {
77
- const hierarchyNode = modelNode.nodeData;
78
- if (HierarchyNode.isInstancesNode(hierarchyNode)) {
79
- return groupIModelInstanceKeys(hierarchyNode.key.instanceKeys);
80
- }
81
- if (HierarchyNode.isGroupingNode(hierarchyNode)) {
82
- return Object.entries(groupIModelInstanceKeys(hierarchyNode.groupedInstanceKeys)).reduce((imodelSelectables, [imodelKey, instanceKeys]) => ({
83
- ...imodelSelectables,
84
- [imodelKey]: [
85
- {
86
- identifier: modelNode.id,
87
- data: hierarchyNode,
88
- async *loadInstanceKeys() {
89
- for (const key of instanceKeys) {
90
- yield key;
91
- }
92
- },
93
- },
94
- ],
95
- }), {});
96
- }
97
- assert(HierarchyNode.isGeneric(hierarchyNode));
98
- return {
99
- // note: generic nodes aren't associated with an imodel
100
- [""]: [createSelectableForGenericNode(hierarchyNode, modelNode.id)],
101
- };
102
- }
103
- function groupIModelInstanceKeys(instanceKeys) {
104
- return instanceKeys.reduce((imodelSelectables, key) => {
105
- const imodelKey = key.imodelKey ?? "";
106
- let selectablesList = imodelSelectables[imodelKey];
107
- if (!selectablesList) {
108
- selectablesList = [];
109
- imodelSelectables[imodelKey] = selectablesList;
110
- }
111
- selectablesList.push(key);
112
- return imodelSelectables;
113
- }, {});
114
- }
115
- //# sourceMappingURL=UseUnifiedSelection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UseUnifiedSelection.js","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/internal/UseUnifiedSelection.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAkB,aAAa,EAA8C,MAAM,iCAAiC,CAAC;AAE5H,OAAO,EAAc,WAAW,EAAoB,MAAM,0BAA0B,CAAC;AAuCrF,gBAAgB;AAChB,MAAM,UAAU,uBAAuB,CAAC,EACtC,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,8BAA8B,GAAG,qCAAqC,GAC0D;IAChI,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAuB,GAAG,EAAE,CAAC,CAAC;QAClE,cAAc,EAAE,oBAAoB,CAAC,GAAG,EAAE,CAAC,KAAK;QAChD,WAAW,EAAE,oBAAoB,CAAC,GAAG,EAAE,GAAE,CAAC;KAC3C,CAAC,CAAC,CAAC;IAEJ,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,gBAAgB,EAAE,8BAA8B,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC1G,OAAO,gBAAgB,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE;YAChE,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YACD,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,gBAAgB,EAAE,8BAA8B,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC5G,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,gBAAgB,EAAE,8BAA8B,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC;IAErF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,qCAAqC,GAAgF,CACzH,IAAI,EACJ,eAAe,EACH,EAAE,CAAC,CAAC;IAChB,UAAU,EAAE,eAAe;IAC3B,IAAI,EAAE,IAAI;IACV,KAAK,CAAC,CAAC,gBAAgB,KAAI,CAAC;CAC7B,CAAC,CAAC;AAEH,SAAS,aAAa,CACpB,MAAc,EACd,OAAyB,EACzB,8BAA2G,EAC3G,OAAmF;IAEnF,OAAO;QACL,cAAc,EAAE,CAAC,MAAc,EAAE,EAAE;YACjC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YAC7B,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,EAAE,KAAK,SAAS,EAAE,CAAC;gBACpC,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,MAAM,CAAC,OAAO,CAAC,+BAA+B,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,EAAE;gBACjI,MAAM,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;gBACzE,OAAO,WAAW,CAAC,MAAM,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC;YACjE,CAAC,CAAC,CAAC;QACL,CAAC;QAED,WAAW,EAAE,CAAC,OAAsB,EAAE,UAA+B,EAAE,EAAE;YACvE,MAAM,iBAAiB,GAA0C,EAAE,CAAC;YACpE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC7B,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,EAAE,KAAK,SAAS,EAAE,CAAC;oBACpC,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,OAAO,CAAC,+BAA+B,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE,EAAE;oBAC7H,IAAI,eAAe,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;oBACnD,IAAI,CAAC,eAAe,EAAE,CAAC;wBACrB,eAAe,GAAG,EAAE,CAAC;wBACrB,iBAAiB,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC;oBACjD,CAAC;oBACD,eAAe,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC5E,CAAC,CAAC,CAAC;YACL,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,EAAE;gBACrE,MAAM,WAAW,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBACjE,QAAQ,UAAU,EAAE,CAAC;oBACnB,KAAK,KAAK;wBACR,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;wBACpC,OAAO;oBACT,KAAK,QAAQ;wBACX,OAAO,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;wBACzC,OAAO;oBACT,KAAK,SAAS;wBACZ,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;wBACtC,OAAO;gBACX,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CACtC,SAAiC,EACjC,8BAA2G;IAE3G,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC;IACzC,IAAI,aAAa,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC;QACjD,OAAO,uBAAuB,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,aAAa,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CACtF,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;YACjD,GAAG,iBAAiB;YACpB,CAAC,SAAS,CAAC,EAAE;gBACX;oBACE,UAAU,EAAE,SAAS,CAAC,EAAE;oBACxB,IAAI,EAAE,aAAa;oBACnB,KAAK,CAAC,CAAC,gBAAgB;wBACrB,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;4BAC/B,MAAM,GAAG,CAAC;wBACZ,CAAC;oBACH,CAAC;iBACF;aACF;SACF,CAAC,EACF,EAA2C,CAC5C,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;IAC/C,OAAO;QACL,uDAAuD;QACvD,CAAC,EAAE,CAAC,EAAE,CAAC,8BAA8B,CAAC,aAAa,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;KACpE,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,YAA8C;IAC7E,OAAO,YAAY,CAAC,MAAM,CACxB,CAAC,iBAAiB,EAAE,GAAG,EAAE,EAAE;QACzB,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;QACtC,IAAI,eAAe,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,eAAe,GAAG,EAAE,CAAC;YACrB,iBAAiB,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC;QACjD,CAAC;QACD,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,iBAAiB,CAAC;IAC3B,CAAC,EACD,EAA4C,CAC7C,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 { useEffect, useState } from \"react\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { GenericNodeKey, HierarchyNode, InstancesNodeKey, NonGroupingHierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { InstanceKey } from \"@itwin/presentation-shared\";\nimport { Selectable, Selectables, SelectionStorage } from \"@itwin/unified-selection\";\nimport { SelectionChangeType } from \"../UseSelectionHandler.js\";\nimport { TreeModelHierarchyNode, TreeModelRootNode } from \"./TreeModel.js\";\n\n/** @internal */\nexport interface TreeSelectionOptions {\n isNodeSelected: (nodeId: string) => boolean;\n selectNodes: (nodeIds: Array<string>, changeType: SelectionChangeType) => void;\n}\n\n/** @public */\nexport interface UseUnifiedTreeSelectionProps {\n /**\n * Identifier to distinguish this source of changes to the unified selection from another ones in the application.\n */\n sourceName: string;\n\n /**\n * An optional function that allows customizing the `Selectable` object that gets created for generic hierarchy nodes. When\n * not supplied, the `Selectable` is created using the following signature:\n * ```ts\n * {\n * identifier: treeModelNodeId,\n * data: node,\n * async *loadInstanceKeys() {},\n * }\n * ```\n *\n * @param node Hierarchy node to create a selectable for.\n * @param treeModelNodeId ID of the hierarchy node in the internal tree model. This ID uniquely identifies the node in the whole hierarchy, as opposed to `GenericNodeKey.id` contained within the `node`, which may not be unique.\n */\n createSelectableForGenericNode?: (node: NonGroupingHierarchyNode & { key: GenericNodeKey }, treeModelNodeId: string) => Selectable;\n\n /**\n * Unified selection storage to use for listening, getting and changing active selection.\n */\n selectionStorage: SelectionStorage;\n}\n\n/** @internal */\nexport function useUnifiedTreeSelection({\n sourceName,\n selectionStorage,\n getTreeModelNode,\n createSelectableForGenericNode = defaultCreateSelectableForGenericNode,\n}: UseUnifiedTreeSelectionProps & { getTreeModelNode: (nodeId: string) => TreeModelHierarchyNode | TreeModelRootNode | undefined }): TreeSelectionOptions {\n const [options, setOptions] = useState<TreeSelectionOptions>(() => ({\n isNodeSelected: /* c8 ignore next */ () => false,\n selectNodes: /* c8 ignore next */ () => {},\n }));\n\n useEffect(() => {\n setOptions(createOptions(sourceName, selectionStorage, createSelectableForGenericNode, getTreeModelNode));\n return selectionStorage.selectionChangeEvent.addListener((args) => {\n if (args.level > 0) {\n return;\n }\n setOptions(createOptions(sourceName, selectionStorage, createSelectableForGenericNode, getTreeModelNode));\n });\n }, [selectionStorage, createSelectableForGenericNode, getTreeModelNode, sourceName]);\n\n return options;\n}\n\nconst defaultCreateSelectableForGenericNode: NonNullable<UseUnifiedTreeSelectionProps[\"createSelectableForGenericNode\"]> = (\n node,\n treeModelNodeId,\n): Selectable => ({\n identifier: treeModelNodeId,\n data: node,\n async *loadInstanceKeys() {},\n});\n\nfunction createOptions(\n source: string,\n storage: SelectionStorage,\n createSelectableForGenericNode: NonNullable<UseUnifiedTreeSelectionProps[\"createSelectableForGenericNode\"]>,\n getNode: (nodeId: string) => TreeModelHierarchyNode | TreeModelRootNode | undefined,\n): TreeSelectionOptions {\n return {\n isNodeSelected: (nodeId: string) => {\n const node = getNode(nodeId);\n if (!node || node?.id === undefined) {\n return false;\n }\n return Object.entries(groupNodeSelectablesByIModelKey(node, createSelectableForGenericNode)).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 || node?.id === undefined) {\n return;\n }\n Object.entries(groupNodeSelectablesByIModelKey(node, createSelectableForGenericNode)).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(\n modelNode: TreeModelHierarchyNode,\n createSelectableForGenericNode: NonNullable<UseUnifiedTreeSelectionProps[\"createSelectableForGenericNode\"]>,\n): { [imodelKey: string]: Selectable[] } {\n const hierarchyNode = modelNode.nodeData;\n if (HierarchyNode.isInstancesNode(hierarchyNode)) {\n return groupIModelInstanceKeys(hierarchyNode.key.instanceKeys);\n }\n if (HierarchyNode.isGroupingNode(hierarchyNode)) {\n return Object.entries(groupIModelInstanceKeys(hierarchyNode.groupedInstanceKeys)).reduce(\n (imodelSelectables, [imodelKey, instanceKeys]) => ({\n ...imodelSelectables,\n [imodelKey]: [\n {\n identifier: modelNode.id,\n data: hierarchyNode,\n async *loadInstanceKeys() {\n for (const key of instanceKeys) {\n yield key;\n }\n },\n },\n ],\n }),\n {} as { [imodelKey: string]: Selectable[] },\n );\n }\n assert(HierarchyNode.isGeneric(hierarchyNode));\n return {\n // note: generic nodes aren't associated with an imodel\n [\"\"]: [createSelectableForGenericNode(hierarchyNode, modelNode.id)],\n };\n}\n\nfunction groupIModelInstanceKeys(instanceKeys: InstancesNodeKey[\"instanceKeys\"]) {\n return instanceKeys.reduce(\n (imodelSelectables, key) => {\n const imodelKey = key.imodelKey ?? \"\";\n let selectablesList = imodelSelectables[imodelKey];\n if (!selectablesList) {\n selectablesList = [];\n imodelSelectables[imodelKey] = selectablesList;\n }\n selectablesList.push(key);\n return imodelSelectables;\n },\n {} as { [imodelKey: string]: InstanceKey[] },\n );\n}\n"]}
@@ -1,23 +0,0 @@
1
- import "./DisposePolyfill.js";
2
- import { HierarchyNode } from "@itwin/presentation-hierarchies";
3
- /** @internal */
4
- export declare function createNodeId(node: Pick<HierarchyNode, "key" | "parentKeys">): string;
5
- /** @internal */
6
- export declare function sameNodes(lhs: HierarchyNode, rhs: HierarchyNode): boolean;
7
- /** @internal */
8
- export declare const MAX_LIMIT_OVERRIDE = 10000;
9
- /**
10
- * A helper that disposes the given object, if it's disposable.
11
- *
12
- * The first option is to dispose using the deprecated `dispose` method if it exists on the object.
13
- * If not, we use the new `Symbol.dispose` method. If that doesn't exist either, the object is
14
- * considered as non-disposable and nothing is done with it.
15
- *
16
- * @internal
17
- */
18
- export declare function safeDispose(disposable: {} | {
19
- [Symbol.dispose]: () => void;
20
- } | {
21
- dispose: () => void;
22
- }): void;
23
- //# sourceMappingURL=Utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/internal/Utils.ts"],"names":[],"mappings":"AAKA,OAAO,sBAAsB,CAAC;AAE9B,OAAO,EAAE,aAAa,EAAoB,MAAM,iCAAiC,CAAC;AAElF,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,YAAY,CAAC,UAE3E;AAiBD,gBAAgB;AAChB,wBAAgB,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAezE;AAED,gBAAgB;AAChB,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AAExC;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,EAAE,GAAG;IAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,QAMtG"}
@@ -1,58 +0,0 @@
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 "./DisposePolyfill.js";
6
- import { HierarchyNodeKey } from "@itwin/presentation-hierarchies";
7
- /** @internal */
8
- export function createNodeId(node) {
9
- return [...node.parentKeys.map(serializeNodeKey), serializeNodeKey(node.key)].join(";");
10
- }
11
- function serializeNodeKey(key) {
12
- return convertObjectValuesToString(key);
13
- }
14
- function convertObjectValuesToString(obj) {
15
- return Object.entries(obj)
16
- .map(([, value]) => {
17
- if (typeof value === "object") {
18
- return convertObjectValuesToString(value);
19
- }
20
- return String(value);
21
- })
22
- .join(",");
23
- }
24
- /** @internal */
25
- export function sameNodes(lhs, rhs) {
26
- if (HierarchyNodeKey.compare(lhs.key, rhs.key) !== 0) {
27
- return false;
28
- }
29
- if (lhs.parentKeys.length !== rhs.parentKeys.length) {
30
- return false;
31
- }
32
- for (let i = lhs.parentKeys.length - 1; i >= 0; --i) {
33
- if (HierarchyNodeKey.compare(lhs.parentKeys[i], rhs.parentKeys[i]) !== 0) {
34
- return false;
35
- }
36
- }
37
- return true;
38
- }
39
- /** @internal */
40
- export const MAX_LIMIT_OVERRIDE = 10000;
41
- /**
42
- * A helper that disposes the given object, if it's disposable.
43
- *
44
- * The first option is to dispose using the deprecated `dispose` method if it exists on the object.
45
- * If not, we use the new `Symbol.dispose` method. If that doesn't exist either, the object is
46
- * considered as non-disposable and nothing is done with it.
47
- *
48
- * @internal
49
- */
50
- export function safeDispose(disposable) {
51
- if ("dispose" in disposable) {
52
- disposable.dispose();
53
- }
54
- else if (Symbol.dispose in disposable) {
55
- disposable[Symbol.dispose]();
56
- }
57
- }
58
- //# sourceMappingURL=Utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/internal/Utils.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,sBAAsB,CAAC;AAE9B,OAAO,EAAiB,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAElF,gBAAgB;AAChB,MAAM,UAAU,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,MAAM,UAAU,SAAS,CAAC,GAAkB,EAAE,GAAkB;IAC9D,IAAI,gBAAgB,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,gBAAgB,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;AAChB,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAExC;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,UAA2E;IACrG,IAAI,SAAS,IAAI,UAAU,EAAE,CAAC;QAC5B,UAAU,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;SAAM,IAAI,MAAM,CAAC,OAAO,IAAI,UAAU,EAAE,CAAC;QACxC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/B,CAAC;AACH,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 \"./DisposePolyfill.js\";\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\n/**\n * A helper that disposes the given object, if it's disposable.\n *\n * The first option is to dispose using the deprecated `dispose` method if it exists on the object.\n * If not, we use the new `Symbol.dispose` method. If that doesn't exist either, the object is\n * considered as non-disposable and nothing is done with it.\n *\n * @internal\n */\nexport function safeDispose(disposable: {} | { [Symbol.dispose]: () => void } | { dispose: () => void }) {\n if (\"dispose\" in disposable) {\n disposable.dispose();\n } else if (Symbol.dispose in disposable) {\n disposable[Symbol.dispose]();\n }\n}\n"]}
@@ -1,27 +0,0 @@
1
- import { HierarchyLevelDetails, TreeRendererProps } from "../Renderers.js";
2
- import { TreeNode } from "../TreeNode.js";
3
- import { useErrorNodes } from "./FlatTreeNode.js";
4
- /** @alpha */
5
- export interface ErrorItemRendererProps extends Pick<TreeRendererProps, "getHierarchyLevelDetails"> {
6
- /** A node containing an error. */
7
- errorNode: ReturnType<typeof useErrorNodes>[number];
8
- /** A callback to reload a hierarchy level when an error occurs and `retry` button is clicked. */
9
- reloadTree: (options: {
10
- parentNodeId: string | undefined;
11
- }) => void;
12
- /** A callback to scroll to the node associated with the error. */
13
- scrollToNode: (errorNode: TreeNode) => void;
14
- /** A callback to initiate filtering of the given hierarchy level. */
15
- filterHierarchyLevel?: (hierarchyLevelDetails: HierarchyLevelDetails) => void;
16
- }
17
- /**
18
- * Renders StrataKit `<ErrorRegion.Item />` for all supported error types:
19
- * - `ResultSetTooLarge` - renders `LocalizedStrings.resultLimitExceeded` message with actions to increase limit or apply filtering
20
- * - `NoFilterMatches` - renders `LocalizedStrings.noFilteredChildren` message with action to change filter
21
- * - `ChildrenLoad` - renders `LocalizedStrings.failedToCreateHierarchy` message with action to retry loading
22
- * - `Unknown` - renders message set on error object.
23
- *
24
- * @alpha
25
- */
26
- export declare function ErrorItemRenderer({ errorNode, getHierarchyLevelDetails, filterHierarchyLevel, reloadTree, scrollToNode }: ErrorItemRendererProps): import("react/jsx-runtime").JSX.Element;
27
- //# sourceMappingURL=ErrorItemRenderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ErrorItemRenderer.d.ts","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/stratakit/ErrorItemRenderer.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,aAAa;AACb,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,iBAAiB,EAAE,0BAA0B,CAAC;IACjG,kCAAkC;IAClC,SAAS,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;IACpD,iGAAiG;IACjG,UAAU,EAAE,CAAC,OAAO,EAAE;QAAE,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,KAAK,IAAI,CAAC;IACpE,kEAAkE;IAClE,YAAY,EAAE,CAAC,SAAS,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC5C,qEAAqE;IACrE,oBAAoB,CAAC,EAAE,CAAC,qBAAqB,EAAE,qBAAqB,KAAK,IAAI,CAAC;CAC/E;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,sBAAsB,2CAoEhJ"}
@@ -1,74 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
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
- import { Anchor, Text } from "@stratakit/bricks";
7
- import { unstable_ErrorRegion as ErrorRegion } from "@stratakit/structures";
8
- import { MAX_LIMIT_OVERRIDE } from "../internal/Utils.js";
9
- import { useLocalizationContext } from "./LocalizationContext.js";
10
- /**
11
- * Renders StrataKit `<ErrorRegion.Item />` for all supported error types:
12
- * - `ResultSetTooLarge` - renders `LocalizedStrings.resultLimitExceeded` message with actions to increase limit or apply filtering
13
- * - `NoFilterMatches` - renders `LocalizedStrings.noFilteredChildren` message with action to change filter
14
- * - `ChildrenLoad` - renders `LocalizedStrings.failedToCreateHierarchy` message with action to retry loading
15
- * - `Unknown` - renders message set on error object.
16
- *
17
- * @alpha
18
- */
19
- export function ErrorItemRenderer({ errorNode, getHierarchyLevelDetails, filterHierarchyLevel, reloadTree, scrollToNode }) {
20
- const { localizedStrings } = useLocalizationContext();
21
- if (errorNode.error.type === "ResultSetTooLarge") {
22
- const limit = errorNode.error.resultSetSizeLimit;
23
- const onOverrideLimit = getHierarchyLevelDetails ? () => getHierarchyLevelDetails(errorNode.id)?.setSizeLimit(MAX_LIMIT_OVERRIDE) : undefined;
24
- return (_jsx(ErrorItemContainer, { errorNode: errorNode, actions: [
25
- {
26
- action: () => {
27
- onOverrideLimit?.();
28
- },
29
- label: localizedStrings.increaseHierarchyLimit.replace("{{limit}}", MAX_LIMIT_OVERRIDE.toString()),
30
- condition: () => !!onOverrideLimit && limit < MAX_LIMIT_OVERRIDE,
31
- },
32
- {
33
- action: () => {
34
- const hierarchyLevelDetails = getHierarchyLevelDetails?.(errorNode.id);
35
- hierarchyLevelDetails && filterHierarchyLevel?.(hierarchyLevelDetails);
36
- },
37
- label: localizedStrings.increaseHierarchyLimitWithFiltering,
38
- condition: () => !!filterHierarchyLevel && !!errorNode?.isFilterable,
39
- },
40
- ], message: localizedStrings.resultLimitExceeded.replace("{{limit}}", limit.toString()), scrollToElement: () => scrollToNode(errorNode) }));
41
- }
42
- if (errorNode.error.type === "NoFilterMatches") {
43
- return (_jsx(ErrorItemContainer, { errorNode: errorNode, actions: [
44
- {
45
- action: () => {
46
- const hierarchyLevelDetails = getHierarchyLevelDetails?.(errorNode.id);
47
- hierarchyLevelDetails && filterHierarchyLevel?.(hierarchyLevelDetails);
48
- },
49
- label: localizedStrings.noFilteredChildrenChangeFilter,
50
- condition: () => true,
51
- },
52
- ], message: localizedStrings.noFilteredChildren, scrollToElement: () => scrollToNode(errorNode) }));
53
- }
54
- if (errorNode.error.type === "ChildrenLoad") {
55
- return (_jsx(ErrorItemContainer, { errorNode: errorNode, actions: [
56
- {
57
- action: () => reloadTree({ parentNodeId: errorNode.id }),
58
- label: localizedStrings.retry,
59
- condition: () => true,
60
- },
61
- ], message: localizedStrings.failedToCreateHierarchy, scrollToElement: () => scrollToNode(errorNode) }));
62
- }
63
- return _jsx(ErrorItemContainer, { errorNode: errorNode, message: errorNode.error.message, scrollToElement: () => scrollToNode(errorNode) });
64
- }
65
- function ErrorItemContainer({ errorNode, message, actions, scrollToElement }) {
66
- return (_jsx(ErrorRegion.Item, { message: _jsx(MessageWithLink, { linkLabel: errorNode.label, scrollToElement: scrollToElement, message: message }), messageId: errorNode.id, actions: actions
67
- ?.filter(({ condition }) => condition())
68
- .map(({ label, action }) => (_jsx(Text, { variant: "body-sm", children: _jsx(Anchor, { onClick: action, render: _jsx("button", {}), children: label }) }, label))) }));
69
- }
70
- function MessageWithLink({ linkLabel, scrollToElement, message }) {
71
- const splitMessage = message.split("{{node}}", 2);
72
- return (_jsxs("div", { style: { display: "flex", whiteSpace: "pre", flexWrap: "wrap" }, children: [splitMessage[0], _jsx(Anchor, { onClick: scrollToElement, render: _jsx("button", {}), children: linkLabel }), splitMessage[1] ? splitMessage[1] : null] }));
73
- }
74
- //# sourceMappingURL=ErrorItemRenderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ErrorItemRenderer.js","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/stratakit/ErrorItemRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Anchor, Text } from \"@stratakit/bricks\";\nimport { unstable_ErrorRegion as ErrorRegion } from \"@stratakit/structures\";\nimport { MAX_LIMIT_OVERRIDE } from \"../internal/Utils.js\";\nimport { HierarchyLevelDetails, TreeRendererProps } from \"../Renderers.js\";\nimport { TreeNode } from \"../TreeNode.js\";\nimport { useErrorNodes } from \"./FlatTreeNode.js\";\nimport { useLocalizationContext } from \"./LocalizationContext.js\";\n\n/** @alpha */\nexport interface ErrorItemRendererProps extends Pick<TreeRendererProps, \"getHierarchyLevelDetails\"> {\n /** A node containing an error. */\n errorNode: ReturnType<typeof useErrorNodes>[number];\n /** A callback to reload a hierarchy level when an error occurs and `retry` button is clicked. */\n reloadTree: (options: { parentNodeId: string | undefined }) => void;\n /** A callback to scroll to the node associated with the error. */\n scrollToNode: (errorNode: TreeNode) => void;\n /** A callback to initiate filtering of the given hierarchy level. */\n filterHierarchyLevel?: (hierarchyLevelDetails: HierarchyLevelDetails) => void;\n}\n\n/**\n * Renders StrataKit `<ErrorRegion.Item />` for all supported error types:\n * - `ResultSetTooLarge` - renders `LocalizedStrings.resultLimitExceeded` message with actions to increase limit or apply filtering\n * - `NoFilterMatches` - renders `LocalizedStrings.noFilteredChildren` message with action to change filter\n * - `ChildrenLoad` - renders `LocalizedStrings.failedToCreateHierarchy` message with action to retry loading\n * - `Unknown` - renders message set on error object.\n *\n * @alpha\n */\nexport function ErrorItemRenderer({ errorNode, getHierarchyLevelDetails, filterHierarchyLevel, reloadTree, scrollToNode }: ErrorItemRendererProps) {\n const { localizedStrings } = useLocalizationContext();\n\n if (errorNode.error.type === \"ResultSetTooLarge\") {\n const limit = errorNode.error.resultSetSizeLimit;\n const onOverrideLimit = getHierarchyLevelDetails ? () => getHierarchyLevelDetails(errorNode.id)?.setSizeLimit(MAX_LIMIT_OVERRIDE) : undefined;\n return (\n <ErrorItemContainer\n errorNode={errorNode}\n actions={[\n {\n action: () => {\n onOverrideLimit?.();\n },\n label: localizedStrings.increaseHierarchyLimit.replace(\"{{limit}}\", MAX_LIMIT_OVERRIDE.toString()),\n condition: () => !!onOverrideLimit && limit < MAX_LIMIT_OVERRIDE,\n },\n {\n action: () => {\n const hierarchyLevelDetails = getHierarchyLevelDetails?.(errorNode.id);\n hierarchyLevelDetails && filterHierarchyLevel?.(hierarchyLevelDetails);\n },\n label: localizedStrings.increaseHierarchyLimitWithFiltering,\n condition: () => !!filterHierarchyLevel && !!errorNode?.isFilterable,\n },\n ]}\n message={localizedStrings.resultLimitExceeded.replace(\"{{limit}}\", limit.toString())}\n scrollToElement={() => scrollToNode(errorNode)}\n />\n );\n }\n if (errorNode.error.type === \"NoFilterMatches\") {\n return (\n <ErrorItemContainer\n errorNode={errorNode}\n actions={[\n {\n action: () => {\n const hierarchyLevelDetails = getHierarchyLevelDetails?.(errorNode.id);\n hierarchyLevelDetails && filterHierarchyLevel?.(hierarchyLevelDetails);\n },\n label: localizedStrings.noFilteredChildrenChangeFilter,\n condition: () => true,\n },\n ]}\n message={localizedStrings.noFilteredChildren}\n scrollToElement={() => scrollToNode(errorNode)}\n />\n );\n }\n if (errorNode.error.type === \"ChildrenLoad\") {\n return (\n <ErrorItemContainer\n errorNode={errorNode}\n actions={[\n {\n action: () => reloadTree({ parentNodeId: errorNode.id }),\n label: localizedStrings.retry,\n condition: () => true,\n },\n ]}\n message={localizedStrings.failedToCreateHierarchy}\n scrollToElement={() => scrollToNode(errorNode)}\n />\n );\n }\n\n return <ErrorItemContainer errorNode={errorNode} message={errorNode.error.message} scrollToElement={() => scrollToNode(errorNode)} />;\n}\n\ntype ErrorItemContainerProps = {\n errorNode: TreeNode;\n message: string;\n actions?: { action: () => void; label: string; condition: () => boolean }[];\n} & Pick<MessageWithLinkProps, \"scrollToElement\">;\n\nfunction ErrorItemContainer({ errorNode, message, actions, scrollToElement }: ErrorItemContainerProps) {\n return (\n <ErrorRegion.Item\n message={<MessageWithLink linkLabel={errorNode.label} scrollToElement={scrollToElement} message={message} />}\n messageId={errorNode.id}\n actions={actions\n ?.filter(({ condition }) => condition())\n .map(({ label, action }) => (\n <Text key={label} variant=\"body-sm\">\n <Anchor onClick={action} render={<button />}>\n {label}\n </Anchor>\n </Text>\n ))}\n />\n );\n}\n\ninterface MessageWithLinkProps {\n scrollToElement: () => void;\n message: string;\n linkLabel?: string;\n}\n\nfunction MessageWithLink({ linkLabel, scrollToElement, message }: MessageWithLinkProps) {\n const splitMessage = message.split(\"{{node}}\", 2);\n return (\n <div style={{ display: \"flex\", whiteSpace: \"pre\", flexWrap: \"wrap\" }}>\n {splitMessage[0]}\n <Anchor onClick={scrollToElement} render={<button />}>\n {linkLabel}\n </Anchor>\n {splitMessage[1] ? splitMessage[1] : null}\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"FlatTreeNode.d.ts","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/stratakit/FlatTreeNode.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C;;;;GAIG;AACH,UAAU,mBAAmB;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,IAAI,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;AAElE,aAAa;AACb,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,IAAI,mBAAmB,CAEjF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,kBAErD;AAoBD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,CAcxG"}