@itwin/presentation-hierarchies-react 2.0.0-alpha.52 → 2.0.0-alpha.54

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 (98) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/lib/esm/presentation-hierarchies-react/Renderers.d.ts +62 -55
  3. package/lib/esm/presentation-hierarchies-react/Renderers.d.ts.map +1 -1
  4. package/lib/esm/presentation-hierarchies-react/TreeNode.d.ts +33 -29
  5. package/lib/esm/presentation-hierarchies-react/TreeNode.d.ts.map +1 -1
  6. package/lib/esm/presentation-hierarchies-react/UseIModelTree.d.ts +27 -16
  7. package/lib/esm/presentation-hierarchies-react/UseIModelTree.d.ts.map +1 -1
  8. package/lib/esm/presentation-hierarchies-react/UseIModelTree.js +181 -54
  9. package/lib/esm/presentation-hierarchies-react/UseIModelTree.js.map +1 -1
  10. package/lib/esm/presentation-hierarchies-react/UseNodeHighlighting.d.ts +12 -6
  11. package/lib/esm/presentation-hierarchies-react/UseNodeHighlighting.d.ts.map +1 -1
  12. package/lib/esm/presentation-hierarchies-react/UseNodeHighlighting.js +54 -49
  13. package/lib/esm/presentation-hierarchies-react/UseNodeHighlighting.js.map +1 -1
  14. package/lib/esm/presentation-hierarchies-react/UseSelectionHandler.d.ts +7 -30
  15. package/lib/esm/presentation-hierarchies-react/UseSelectionHandler.d.ts.map +1 -1
  16. package/lib/esm/presentation-hierarchies-react/UseSelectionHandler.js +116 -74
  17. package/lib/esm/presentation-hierarchies-react/UseSelectionHandler.js.map +1 -1
  18. package/lib/esm/presentation-hierarchies-react/UseTree.d.ts +67 -54
  19. package/lib/esm/presentation-hierarchies-react/UseTree.d.ts.map +1 -1
  20. package/lib/esm/presentation-hierarchies-react/UseTree.js +283 -226
  21. package/lib/esm/presentation-hierarchies-react/UseTree.js.map +1 -1
  22. package/lib/esm/presentation-hierarchies-react/Utils.js +44 -27
  23. package/lib/esm/presentation-hierarchies-react/Utils.js.map +1 -1
  24. package/lib/esm/presentation-hierarchies-react/internal/DisposePolyfill.js +6 -7
  25. package/lib/esm/presentation-hierarchies-react/internal/DisposePolyfill.js.map +1 -1
  26. package/lib/esm/presentation-hierarchies-react/internal/TreeActions.js +271 -298
  27. package/lib/esm/presentation-hierarchies-react/internal/TreeActions.js.map +1 -1
  28. package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.js +91 -82
  29. package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.js.map +1 -1
  30. package/lib/esm/presentation-hierarchies-react/internal/TreeModel.d.ts +3 -47
  31. package/lib/esm/presentation-hierarchies-react/internal/TreeModel.js +114 -151
  32. package/lib/esm/presentation-hierarchies-react/internal/TreeModel.js.map +1 -1
  33. package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts +32 -37
  34. package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts.map +1 -1
  35. package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.js +128 -101
  36. package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.js.map +1 -1
  37. package/lib/esm/presentation-hierarchies-react/internal/Utils.js +29 -44
  38. package/lib/esm/presentation-hierarchies-react/internal/Utils.js.map +1 -1
  39. package/lib/esm/presentation-hierarchies-react/stratakit/ErrorItemRenderer.d.ts +24 -13
  40. package/lib/esm/presentation-hierarchies-react/stratakit/ErrorItemRenderer.d.ts.map +1 -1
  41. package/lib/esm/presentation-hierarchies-react/stratakit/ErrorItemRenderer.js +344 -67
  42. package/lib/esm/presentation-hierarchies-react/stratakit/ErrorItemRenderer.js.map +1 -1
  43. package/lib/esm/presentation-hierarchies-react/stratakit/FlatTreeNode.d.ts +16 -15
  44. package/lib/esm/presentation-hierarchies-react/stratakit/FlatTreeNode.d.ts.map +1 -1
  45. package/lib/esm/presentation-hierarchies-react/stratakit/FlatTreeNode.js +78 -60
  46. package/lib/esm/presentation-hierarchies-react/stratakit/FlatTreeNode.js.map +1 -1
  47. package/lib/esm/presentation-hierarchies-react/stratakit/LocalizationContext.d.ts +122 -117
  48. package/lib/esm/presentation-hierarchies-react/stratakit/LocalizationContext.d.ts.map +1 -1
  49. package/lib/esm/presentation-hierarchies-react/stratakit/LocalizationContext.js +59 -38
  50. package/lib/esm/presentation-hierarchies-react/stratakit/LocalizationContext.js.map +1 -1
  51. package/lib/esm/presentation-hierarchies-react/stratakit/RootErrorRenderer.d.ts +16 -5
  52. package/lib/esm/presentation-hierarchies-react/stratakit/RootErrorRenderer.d.ts.map +1 -1
  53. package/lib/esm/presentation-hierarchies-react/stratakit/RootErrorRenderer.js +161 -35
  54. package/lib/esm/presentation-hierarchies-react/stratakit/RootErrorRenderer.js.map +1 -1
  55. package/lib/esm/presentation-hierarchies-react/stratakit/TreeAction.d.ts +21 -17
  56. package/lib/esm/presentation-hierarchies-react/stratakit/TreeAction.d.ts.map +1 -1
  57. package/lib/esm/presentation-hierarchies-react/stratakit/TreeAction.js +84 -31
  58. package/lib/esm/presentation-hierarchies-react/stratakit/TreeAction.js.map +1 -1
  59. package/lib/esm/presentation-hierarchies-react/stratakit/TreeErrorRenderer.d.ts +22 -14
  60. package/lib/esm/presentation-hierarchies-react/stratakit/TreeErrorRenderer.d.ts.map +1 -1
  61. package/lib/esm/presentation-hierarchies-react/stratakit/TreeErrorRenderer.js +61 -26
  62. package/lib/esm/presentation-hierarchies-react/stratakit/TreeErrorRenderer.js.map +1 -1
  63. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.d.ts +15 -6
  64. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.d.ts.map +1 -1
  65. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.js +75 -25
  66. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.js.map +1 -1
  67. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.d.ts +16 -40
  68. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.d.ts.map +1 -1
  69. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.js +140 -61
  70. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.js.map +1 -1
  71. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenderer.d.ts +14 -42
  72. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenderer.d.ts.map +1 -1
  73. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenderer.js +489 -121
  74. package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenderer.js.map +1 -1
  75. package/lib/esm/presentation-hierarchies-react/stratakit/TreeRenderer.d.ts +58 -55
  76. package/lib/esm/presentation-hierarchies-react/stratakit/TreeRenderer.d.ts.map +1 -1
  77. package/lib/esm/presentation-hierarchies-react/stratakit/TreeRenderer.js +412 -181
  78. package/lib/esm/presentation-hierarchies-react/stratakit/TreeRenderer.js.map +1 -1
  79. package/lib/esm/presentation-hierarchies-react.d.ts +17 -17
  80. package/lib/esm/presentation-hierarchies-react.js +15 -18
  81. package/package.json +17 -14
  82. package/lib/esm/presentation-hierarchies-react/Renderers.js +0 -6
  83. package/lib/esm/presentation-hierarchies-react/Renderers.js.map +0 -1
  84. package/lib/esm/presentation-hierarchies-react/TreeNode.js +0 -6
  85. package/lib/esm/presentation-hierarchies-react/TreeNode.js.map +0 -1
  86. package/lib/esm/presentation-hierarchies-react/Utils.d.ts +0 -8
  87. package/lib/esm/presentation-hierarchies-react/Utils.d.ts.map +0 -1
  88. package/lib/esm/presentation-hierarchies-react/internal/DisposePolyfill.d.ts +0 -2
  89. package/lib/esm/presentation-hierarchies-react/internal/DisposePolyfill.d.ts.map +0 -1
  90. package/lib/esm/presentation-hierarchies-react/internal/TreeActions.d.ts +0 -53
  91. package/lib/esm/presentation-hierarchies-react/internal/TreeActions.d.ts.map +0 -1
  92. package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.d.ts +0 -62
  93. package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.d.ts.map +0 -1
  94. package/lib/esm/presentation-hierarchies-react/internal/TreeModel.d.ts.map +0 -1
  95. package/lib/esm/presentation-hierarchies-react/internal/Utils.d.ts +0 -23
  96. package/lib/esm/presentation-hierarchies-react/internal/Utils.d.ts.map +0 -1
  97. package/lib/esm/presentation-hierarchies-react.d.ts.map +0 -1
  98. package/lib/esm/presentation-hierarchies-react.js.map +0 -1
@@ -1,74 +1,351 @@
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
1
  import { MAX_LIMIT_OVERRIDE } from "../internal/Utils.js";
9
2
  import { useLocalizationContext } from "./LocalizationContext.js";
3
+ import { c } from "react-compiler-runtime";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { unstable_ErrorRegion } from "@stratakit/structures";
6
+ import { Anchor, Text } from "@stratakit/bricks";
7
+
8
+ //#region src/presentation-hierarchies-react/stratakit/ErrorItemRenderer.tsx
10
9
  /**
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) });
10
+ * Renders StrataKit `<ErrorRegion.Item />` for all supported error types:
11
+ * - `ResultSetTooLarge` - renders `LocalizedStrings.resultLimitExceeded` message with actions to increase limit or apply filtering
12
+ * - `NoFilterMatches` - renders `LocalizedStrings.noFilteredChildren` message with action to change filter
13
+ * - `ChildrenLoad` - renders `LocalizedStrings.failedToCreateHierarchy` message with action to retry loading
14
+ * - `Unknown` - renders message set on error object.
15
+ *
16
+ * @alpha
17
+ */
18
+ function ErrorItemRenderer(t0) {
19
+ const $ = c(73);
20
+ const { errorNode, getHierarchyLevelDetails, filterHierarchyLevel, reloadTree, scrollToNode } = t0;
21
+ const { localizedStrings } = useLocalizationContext();
22
+ if (errorNode.error.type === "ResultSetTooLarge") {
23
+ const limit = errorNode.error.resultSetSizeLimit;
24
+ let t1;
25
+ if ($[0] !== errorNode.id || $[1] !== getHierarchyLevelDetails) {
26
+ t1 = () => getHierarchyLevelDetails(errorNode.id)?.setSizeLimit(MAX_LIMIT_OVERRIDE);
27
+ $[0] = errorNode.id;
28
+ $[1] = getHierarchyLevelDetails;
29
+ $[2] = t1;
30
+ } else t1 = $[2];
31
+ const onOverrideLimit = t1;
32
+ let t2;
33
+ if ($[3] !== onOverrideLimit) {
34
+ t2 = () => {
35
+ onOverrideLimit();
36
+ };
37
+ $[3] = onOverrideLimit;
38
+ $[4] = t2;
39
+ } else t2 = $[4];
40
+ let t3;
41
+ if ($[5] !== localizedStrings.increaseHierarchyLimit) {
42
+ t3 = localizedStrings.increaseHierarchyLimit.replace("{{limit}}", MAX_LIMIT_OVERRIDE.toString());
43
+ $[5] = localizedStrings.increaseHierarchyLimit;
44
+ $[6] = t3;
45
+ } else t3 = $[6];
46
+ let t4;
47
+ if ($[7] !== limit) {
48
+ t4 = () => limit < MAX_LIMIT_OVERRIDE;
49
+ $[7] = limit;
50
+ $[8] = t4;
51
+ } else t4 = $[8];
52
+ let t5;
53
+ if ($[9] !== t2 || $[10] !== t3 || $[11] !== t4) {
54
+ t5 = {
55
+ action: t2,
56
+ label: t3,
57
+ condition: t4
58
+ };
59
+ $[9] = t2;
60
+ $[10] = t3;
61
+ $[11] = t4;
62
+ $[12] = t5;
63
+ } else t5 = $[12];
64
+ let t6;
65
+ if ($[13] !== errorNode.id || $[14] !== filterHierarchyLevel || $[15] !== getHierarchyLevelDetails) {
66
+ t6 = () => {
67
+ const hierarchyLevelDetails = getHierarchyLevelDetails(errorNode.id);
68
+ hierarchyLevelDetails && filterHierarchyLevel?.(hierarchyLevelDetails);
69
+ };
70
+ $[13] = errorNode.id;
71
+ $[14] = filterHierarchyLevel;
72
+ $[15] = getHierarchyLevelDetails;
73
+ $[16] = t6;
74
+ } else t6 = $[16];
75
+ let t7;
76
+ if ($[17] !== errorNode.isFilterable || $[18] !== filterHierarchyLevel) {
77
+ t7 = () => !!filterHierarchyLevel && !!errorNode.isFilterable;
78
+ $[17] = errorNode.isFilterable;
79
+ $[18] = filterHierarchyLevel;
80
+ $[19] = t7;
81
+ } else t7 = $[19];
82
+ let t8;
83
+ if ($[20] !== localizedStrings.increaseHierarchyLimitWithFiltering || $[21] !== t6 || $[22] !== t7) {
84
+ t8 = {
85
+ action: t6,
86
+ label: localizedStrings.increaseHierarchyLimitWithFiltering,
87
+ condition: t7
88
+ };
89
+ $[20] = localizedStrings.increaseHierarchyLimitWithFiltering;
90
+ $[21] = t6;
91
+ $[22] = t7;
92
+ $[23] = t8;
93
+ } else t8 = $[23];
94
+ let t9;
95
+ if ($[24] !== t5 || $[25] !== t8) {
96
+ t9 = [t5, t8];
97
+ $[24] = t5;
98
+ $[25] = t8;
99
+ $[26] = t9;
100
+ } else t9 = $[26];
101
+ let t10;
102
+ if ($[27] !== limit || $[28] !== localizedStrings.resultLimitExceeded) {
103
+ t10 = localizedStrings.resultLimitExceeded.replace("{{limit}}", limit.toString());
104
+ $[27] = limit;
105
+ $[28] = localizedStrings.resultLimitExceeded;
106
+ $[29] = t10;
107
+ } else t10 = $[29];
108
+ let t11;
109
+ if ($[30] !== errorNode || $[31] !== scrollToNode) {
110
+ t11 = () => scrollToNode(errorNode);
111
+ $[30] = errorNode;
112
+ $[31] = scrollToNode;
113
+ $[32] = t11;
114
+ } else t11 = $[32];
115
+ let t12;
116
+ if ($[33] !== errorNode || $[34] !== t10 || $[35] !== t11 || $[36] !== t9) {
117
+ t12 = /* @__PURE__ */ jsx(ErrorItemContainer, {
118
+ errorNode,
119
+ actions: t9,
120
+ message: t10,
121
+ scrollToElement: t11
122
+ });
123
+ $[33] = errorNode;
124
+ $[34] = t10;
125
+ $[35] = t11;
126
+ $[36] = t9;
127
+ $[37] = t12;
128
+ } else t12 = $[37];
129
+ return t12;
130
+ }
131
+ if (errorNode.error.type === "NoFilterMatches") {
132
+ let t1;
133
+ if ($[38] !== errorNode.id || $[39] !== filterHierarchyLevel || $[40] !== getHierarchyLevelDetails) {
134
+ t1 = () => {
135
+ const hierarchyLevelDetails_0 = getHierarchyLevelDetails(errorNode.id);
136
+ hierarchyLevelDetails_0 && filterHierarchyLevel?.(hierarchyLevelDetails_0);
137
+ };
138
+ $[38] = errorNode.id;
139
+ $[39] = filterHierarchyLevel;
140
+ $[40] = getHierarchyLevelDetails;
141
+ $[41] = t1;
142
+ } else t1 = $[41];
143
+ let t2;
144
+ if ($[42] !== localizedStrings.noFilteredChildrenChangeFilter || $[43] !== t1) {
145
+ t2 = [{
146
+ action: t1,
147
+ label: localizedStrings.noFilteredChildrenChangeFilter,
148
+ condition: _temp
149
+ }];
150
+ $[42] = localizedStrings.noFilteredChildrenChangeFilter;
151
+ $[43] = t1;
152
+ $[44] = t2;
153
+ } else t2 = $[44];
154
+ let t3;
155
+ if ($[45] !== errorNode || $[46] !== scrollToNode) {
156
+ t3 = () => scrollToNode(errorNode);
157
+ $[45] = errorNode;
158
+ $[46] = scrollToNode;
159
+ $[47] = t3;
160
+ } else t3 = $[47];
161
+ let t4;
162
+ if ($[48] !== errorNode || $[49] !== localizedStrings.noFilteredChildren || $[50] !== t2 || $[51] !== t3) {
163
+ t4 = /* @__PURE__ */ jsx(ErrorItemContainer, {
164
+ errorNode,
165
+ actions: t2,
166
+ message: localizedStrings.noFilteredChildren,
167
+ scrollToElement: t3
168
+ });
169
+ $[48] = errorNode;
170
+ $[49] = localizedStrings.noFilteredChildren;
171
+ $[50] = t2;
172
+ $[51] = t3;
173
+ $[52] = t4;
174
+ } else t4 = $[52];
175
+ return t4;
176
+ }
177
+ if (errorNode.error.type === "ChildrenLoad") {
178
+ let t1;
179
+ if ($[53] !== errorNode.id || $[54] !== reloadTree) {
180
+ t1 = () => reloadTree({ parentNodeId: errorNode.id });
181
+ $[53] = errorNode.id;
182
+ $[54] = reloadTree;
183
+ $[55] = t1;
184
+ } else t1 = $[55];
185
+ let t2;
186
+ if ($[56] !== localizedStrings.retry || $[57] !== t1) {
187
+ t2 = [{
188
+ action: t1,
189
+ label: localizedStrings.retry,
190
+ condition: _temp2
191
+ }];
192
+ $[56] = localizedStrings.retry;
193
+ $[57] = t1;
194
+ $[58] = t2;
195
+ } else t2 = $[58];
196
+ let t3;
197
+ if ($[59] !== errorNode || $[60] !== scrollToNode) {
198
+ t3 = () => scrollToNode(errorNode);
199
+ $[59] = errorNode;
200
+ $[60] = scrollToNode;
201
+ $[61] = t3;
202
+ } else t3 = $[61];
203
+ let t4;
204
+ if ($[62] !== errorNode || $[63] !== localizedStrings.failedToCreateHierarchy || $[64] !== t2 || $[65] !== t3) {
205
+ t4 = /* @__PURE__ */ jsx(ErrorItemContainer, {
206
+ errorNode,
207
+ actions: t2,
208
+ message: localizedStrings.failedToCreateHierarchy,
209
+ scrollToElement: t3
210
+ });
211
+ $[62] = errorNode;
212
+ $[63] = localizedStrings.failedToCreateHierarchy;
213
+ $[64] = t2;
214
+ $[65] = t3;
215
+ $[66] = t4;
216
+ } else t4 = $[66];
217
+ return t4;
218
+ }
219
+ let t1;
220
+ if ($[67] !== errorNode || $[68] !== scrollToNode) {
221
+ t1 = () => scrollToNode(errorNode);
222
+ $[67] = errorNode;
223
+ $[68] = scrollToNode;
224
+ $[69] = t1;
225
+ } else t1 = $[69];
226
+ let t2;
227
+ if ($[70] !== errorNode || $[71] !== t1) {
228
+ t2 = /* @__PURE__ */ jsx(ErrorItemContainer, {
229
+ errorNode,
230
+ message: errorNode.error.message,
231
+ scrollToElement: t1
232
+ });
233
+ $[70] = errorNode;
234
+ $[71] = t1;
235
+ $[72] = t2;
236
+ } else t2 = $[72];
237
+ return t2;
238
+ }
239
+ function _temp2() {
240
+ return true;
241
+ }
242
+ function _temp() {
243
+ return true;
244
+ }
245
+ function ErrorItemContainer(t0) {
246
+ const $ = c(10);
247
+ const { errorNode, message, actions, scrollToElement } = t0;
248
+ let t1;
249
+ if ($[0] !== errorNode.label || $[1] !== message || $[2] !== scrollToElement) {
250
+ t1 = /* @__PURE__ */ jsx(MessageWithLink, {
251
+ linkLabel: errorNode.label,
252
+ scrollToElement,
253
+ message
254
+ });
255
+ $[0] = errorNode.label;
256
+ $[1] = message;
257
+ $[2] = scrollToElement;
258
+ $[3] = t1;
259
+ } else t1 = $[3];
260
+ let t2;
261
+ if ($[4] !== actions) {
262
+ t2 = actions?.filter(_temp3).map(_temp4);
263
+ $[4] = actions;
264
+ $[5] = t2;
265
+ } else t2 = $[5];
266
+ let t3;
267
+ if ($[6] !== errorNode.id || $[7] !== t1 || $[8] !== t2) {
268
+ t3 = /* @__PURE__ */ jsx(unstable_ErrorRegion.Item, {
269
+ message: t1,
270
+ messageId: errorNode.id,
271
+ actions: t2
272
+ });
273
+ $[6] = errorNode.id;
274
+ $[7] = t1;
275
+ $[8] = t2;
276
+ $[9] = t3;
277
+ } else t3 = $[9];
278
+ return t3;
279
+ }
280
+ function _temp4(t0) {
281
+ const { label, action } = t0;
282
+ return /* @__PURE__ */ jsx(Text, {
283
+ variant: "body-sm",
284
+ children: /* @__PURE__ */ jsx(Anchor, {
285
+ onClick: action,
286
+ render: /* @__PURE__ */ jsx("button", {}),
287
+ children: label
288
+ })
289
+ }, label);
64
290
  }
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))) }));
291
+ function _temp3(t0) {
292
+ const { condition } = t0;
293
+ return condition();
69
294
  }
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] }));
295
+ function MessageWithLink(t0) {
296
+ const $ = c(11);
297
+ const { linkLabel, scrollToElement, message } = t0;
298
+ let t1;
299
+ if ($[0] !== message) {
300
+ t1 = message.split("{{node}}", 2);
301
+ $[0] = message;
302
+ $[1] = t1;
303
+ } else t1 = $[1];
304
+ const splitMessage = t1;
305
+ let t2;
306
+ if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
307
+ t2 = {
308
+ display: "flex",
309
+ whiteSpace: "pre",
310
+ flexWrap: "wrap"
311
+ };
312
+ $[2] = t2;
313
+ } else t2 = $[2];
314
+ let t3;
315
+ if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
316
+ t3 = /* @__PURE__ */ jsx("button", {});
317
+ $[3] = t3;
318
+ } else t3 = $[3];
319
+ let t4;
320
+ if ($[4] !== linkLabel || $[5] !== scrollToElement) {
321
+ t4 = /* @__PURE__ */ jsx(Anchor, {
322
+ onClick: scrollToElement,
323
+ render: t3,
324
+ children: linkLabel
325
+ });
326
+ $[4] = linkLabel;
327
+ $[5] = scrollToElement;
328
+ $[6] = t4;
329
+ } else t4 = $[6];
330
+ const t5 = splitMessage[1] ? splitMessage[1] : null;
331
+ let t6;
332
+ if ($[7] !== splitMessage[0] || $[8] !== t4 || $[9] !== t5) {
333
+ t6 = /* @__PURE__ */ jsxs("div", {
334
+ style: t2,
335
+ children: [
336
+ splitMessage[0],
337
+ t4,
338
+ t5
339
+ ]
340
+ });
341
+ $[7] = splitMessage[0];
342
+ $[8] = t4;
343
+ $[9] = t5;
344
+ $[10] = t6;
345
+ } else t6 = $[10];
346
+ return t6;
73
347
  }
348
+
349
+ //#endregion
350
+ export { ErrorItemRenderer };
74
351
  //# sourceMappingURL=ErrorItemRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorItemRenderer.js","sourceRoot":"","sources":["../../../../src/presentation-hierarchies-react/stratakit/ErrorItemRenderer.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,oBAAoB,IAAI,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAclE;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAE,SAAS,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,UAAU,EAAE,YAAY,EAA0B;IAC/I,MAAM,EAAE,gBAAgB,EAAE,GAAG,sBAAsB,EAAE,CAAC;IAEtD,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC;QACjD,MAAM,eAAe,GAAG,wBAAwB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9I,OAAO,CACL,KAAC,kBAAkB,IACjB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE;gBACP;oBACE,MAAM,EAAE,GAAG,EAAE;wBACX,eAAe,EAAE,EAAE,CAAC;oBACtB,CAAC;oBACD,KAAK,EAAE,gBAAgB,CAAC,sBAAsB,CAAC,OAAO,CAAC,WAAW,EAAE,kBAAkB,CAAC,QAAQ,EAAE,CAAC;oBAClG,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,eAAe,IAAI,KAAK,GAAG,kBAAkB;iBACjE;gBACD;oBACE,MAAM,EAAE,GAAG,EAAE;wBACX,MAAM,qBAAqB,GAAG,wBAAwB,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;wBACvE,qBAAqB,IAAI,oBAAoB,EAAE,CAAC,qBAAqB,CAAC,CAAC;oBACzE,CAAC;oBACD,KAAK,EAAE,gBAAgB,CAAC,mCAAmC;oBAC3D,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,oBAAoB,IAAI,CAAC,CAAC,SAAS,EAAE,YAAY;iBACrE;aACF,EACD,OAAO,EAAE,gBAAgB,CAAC,mBAAmB,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,EACpF,eAAe,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,GAC9C,CACH,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAC/C,OAAO,CACL,KAAC,kBAAkB,IACjB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE;gBACP;oBACE,MAAM,EAAE,GAAG,EAAE;wBACX,MAAM,qBAAqB,GAAG,wBAAwB,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;wBACvE,qBAAqB,IAAI,oBAAoB,EAAE,CAAC,qBAAqB,CAAC,CAAC;oBACzE,CAAC;oBACD,KAAK,EAAE,gBAAgB,CAAC,8BAA8B;oBACtD,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI;iBACtB;aACF,EACD,OAAO,EAAE,gBAAgB,CAAC,kBAAkB,EAC5C,eAAe,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,GAC9C,CACH,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QAC5C,OAAO,CACL,KAAC,kBAAkB,IACjB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE;gBACP;oBACE,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC;oBACxD,KAAK,EAAE,gBAAgB,CAAC,KAAK;oBAC7B,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI;iBACtB;aACF,EACD,OAAO,EAAE,gBAAgB,CAAC,uBAAuB,EACjD,eAAe,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,GAC9C,CACH,CAAC;IACJ,CAAC;IAED,OAAO,KAAC,kBAAkB,IAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,GAAI,CAAC;AACxI,CAAC;AAQD,SAAS,kBAAkB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAA2B;IACnG,OAAO,CACL,KAAC,WAAW,CAAC,IAAI,IACf,OAAO,EAAE,KAAC,eAAe,IAAC,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,GAAI,EAC5G,SAAS,EAAE,SAAS,CAAC,EAAE,EACvB,OAAO,EAAE,OAAO;YACd,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC;aACvC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAC1B,KAAC,IAAI,IAAa,OAAO,EAAC,SAAS,YACjC,KAAC,MAAM,IAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAU,YACxC,KAAK,GACC,IAHA,KAAK,CAIT,CACR,CAAC,GACJ,CACH,CAAC;AACJ,CAAC;AAQD,SAAS,eAAe,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAwB;IACpF,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAClD,OAAO,CACL,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,aACjE,YAAY,CAAC,CAAC,CAAC,EAChB,KAAC,MAAM,IAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,kBAAU,YACjD,SAAS,GACH,EACR,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IACrC,CACP,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 { 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
+ {"version":3,"file":"ErrorItemRenderer.js","names":["Anchor","Text","unstable_ErrorRegion","ErrorRegion","MAX_LIMIT_OVERRIDE","useLocalizationContext","JSX","HierarchyLevelDetails","TreeRendererProps","TreeNode","useErrorNodes","ErrorItemRendererProps","Pick","errorNode","ReturnType","reloadTree","options","parentNodeId","scrollToNode","filterHierarchyLevel","hierarchyLevelDetails","ErrorItemRenderer","t0","$","_c","getHierarchyLevelDetails","localizedStrings","error","type","limit","resultSetSizeLimit","t1","id","setSizeLimit","onOverrideLimit","t2","t3","increaseHierarchyLimit","replace","toString","t4","t5","action","label","condition","t6","t7","isFilterable","t8","increaseHierarchyLimitWithFiltering","t9","t10","resultLimitExceeded","t11","t12","hierarchyLevelDetails_0","noFilteredChildrenChangeFilter","_temp","noFilteredChildren","retry","_temp2","failedToCreateHierarchy","message","ErrorItemContainerProps","actions","MessageWithLinkProps","ErrorItemContainer","scrollToElement","filter","_temp3","map","_temp4","linkLabel","MessageWithLink","split","splitMessage","Symbol","for","display","whiteSpace","flexWrap"],"sources":["../../../../src/presentation-hierarchies-react/stratakit/ErrorItemRenderer.tsx"],"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 { useLocalizationContext } from \"./LocalizationContext.js\";\n\nimport type { JSX } from \"react\";\nimport type { HierarchyLevelDetails, TreeRendererProps } from \"../Renderers.js\";\nimport type { TreeNode } from \"../TreeNode.js\";\nimport type { useErrorNodes } from \"./FlatTreeNode.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({\n errorNode,\n getHierarchyLevelDetails,\n filterHierarchyLevel,\n reloadTree,\n scrollToNode,\n}: ErrorItemRendererProps): JSX.Element {\n const { localizedStrings } = useLocalizationContext();\n\n if (errorNode.error.type === \"ResultSetTooLarge\") {\n const limit = errorNode.error.resultSetSizeLimit;\n const onOverrideLimit = () => getHierarchyLevelDetails(errorNode.id)?.setSizeLimit(MAX_LIMIT_OVERRIDE);\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: () => 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"],"mappings":"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"}
@@ -1,25 +1,27 @@
1
1
  import { TreeNode } from "../TreeNode.js";
2
+
3
+ //#region src/presentation-hierarchies-react/stratakit/FlatTreeNode.d.ts
2
4
  /**
3
5
  * Placeholder item that is added to hierarchy as a child for a parent item while its child items are loading.
4
6
  *
5
7
  * @alpha
6
8
  */
7
9
  interface FlatPlaceholderItem {
8
- id: string;
9
- level: number;
10
- placeholder: true;
10
+ id: string;
11
+ level: number;
12
+ placeholder: true;
11
13
  }
12
14
  /**
13
15
  * An item containing `TreeNode` node with properties needed for a flat tree structure.
14
16
  *
15
17
  * @alpha
16
18
  */
17
- export interface FlatTreeNodeItem {
18
- id: string;
19
- level: number;
20
- levelSize: number;
21
- posInLevel: number;
22
- node: TreeNode;
19
+ interface FlatTreeNodeItem {
20
+ id: string;
21
+ level: number;
22
+ levelSize: number;
23
+ posInLevel: number;
24
+ node: TreeNode;
23
25
  }
24
26
  /**
25
27
  * An Item describing single tree item position and its content inside tree.
@@ -27,9 +29,7 @@ export interface FlatTreeNodeItem {
27
29
  *
28
30
  * @alpha
29
31
  */
30
- export type FlatTreeItem = FlatTreeNodeItem | FlatPlaceholderItem;
31
- /** @alpha */
32
- export declare function isPlaceholderItem(item: FlatTreeItem): item is FlatPlaceholderItem;
32
+ type FlatTreeItem = FlatTreeNodeItem | FlatPlaceholderItem;
33
33
  /**
34
34
  * Used to get a list of `FlatTreeItem` objects for the given list of `TreeNode` objects that represent
35
35
  * a hierarchical structure. The resulting items can be used to render the hierarchy in a flat manner, e.g. using a
@@ -37,12 +37,13 @@ export declare function isPlaceholderItem(item: FlatTreeItem): item is FlatPlace
37
37
  *
38
38
  * @alpha
39
39
  */
40
- export declare function useFlatTreeItems(rootNodes: TreeNode[]): FlatTreeItem[];
40
+ declare function useFlatTreeItems(rootNodes: TreeNode[]): FlatTreeItem[];
41
41
  /**
42
42
  * Finds and returns all nodes containing errors in a given hierarchy.
43
43
  *
44
44
  * @alpha
45
45
  */
46
- export declare function useErrorNodes(rootNodes: TreeNode[]): Array<TreeNode & Pick<Required<TreeNode>, "error">>;
47
- export {};
46
+ declare function useErrorNodes(rootNodes: TreeNode[]): Array<TreeNode & Pick<Required<TreeNode>, "error">>;
47
+ //#endregion
48
+ export { FlatTreeItem, useErrorNodes, useFlatTreeItems };
48
49
  //# sourceMappingURL=FlatTreeNode.d.ts.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"FlatTreeNode.d.ts","names":[],"sources":["../../../../src/presentation-hierarchies-react/stratakit/FlatTreeNode.ts"],"mappings":";;;;;AAO+C;;;UAOrC,mBAAA;EACR,EAAA;EACA,KAAA;EACA,WAAA;AAAA;;AAQF;;;;UAAiB,gBAAA;EACf,EAAA;EACA,KAAA;EACA,SAAA;EACA,UAAA;EACA,IAAA,EAAM,QAAA;AAAA;;AASR;;;;;KAAY,YAAA,GAAe,gBAAA,GAAmB,mBAAA;;;;;;;AAyC9C;iBA3BgB,gBAAA,CAAiB,SAAA,EAAW,QAAA,KAAU,YAAA;;;;;;iBA2BtC,aAAA,CAAc,SAAA,EAAW,QAAA,KAAa,KAAA,CAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,QAAA"}