@itwin/presentation-hierarchies-react 2.0.0-alpha.64 → 2.0.0-alpha.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +51 -0
- package/README.md +2 -8
- package/lib/presentation-hierarchies-react/UseIModelTree.js.map +1 -1
- package/lib/presentation-hierarchies-react/UseTree.js.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/ErrorItemRenderer.js +45 -39
- package/lib/presentation-hierarchies-react/stratakit/ErrorItemRenderer.js.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/{TreeNodeRenderer.css → LabelEditor.css} +3 -3
- package/lib/presentation-hierarchies-react/stratakit/LabelEditor.js +300 -0
- package/lib/presentation-hierarchies-react/stratakit/LabelEditor.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeAction.d.ts.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeAction.js +0 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeAction.js.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeContextMenu.js +97 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeContextMenu.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.js.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.d.ts.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.js.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.d.ts +0 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.d.ts.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.js +43 -351
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.js.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeRenderer.d.ts.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeRenderer.js +34 -5
- package/lib/presentation-hierarchies-react/stratakit/TreeRenderer.js.map +1 -1
- package/package.json +31 -26
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @itwin/presentation-hierarchies-react
|
|
2
2
|
|
|
3
|
+
## 2.0.0-alpha.66
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- [#1540](https://github.com/iTwin/presentation/pull/1540): Updated StrataKit dependencies to newer versions, including `@stratakit/mui@1.0.0` and `@stratakit/structures@0.6.0`. `@stratakit/foundations` is now a peer dependency and should be installed by the application, along with `@mui/material@^9.4.0`.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- [#1514](https://github.com/iTwin/presentation/pull/1514): Fix label editor validation message size
|
|
12
|
+
- [#1538](https://github.com/iTwin/presentation/pull/1538): Fixed keyboard-initiated node rename instantly closing the label editor. Additionally, improved tree node rendering performance by rendering a single shared context menu and label editor at the tree level instead of mounting them in every node.
|
|
13
|
+
- Updated dependencies:
|
|
14
|
+
- @itwin/presentation-shared@2.0.0-alpha.13
|
|
15
|
+
- @itwin/presentation-hierarchies@2.0.0-alpha.18
|
|
16
|
+
- @itwin/unified-selection@2.0.0-alpha.1
|
|
17
|
+
|
|
18
|
+
## 2.0.0-alpha.65
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- [#1477](https://github.com/iTwin/presentation/pull/1477): `ErrorItemRenderer`: Improved unknown error formatting by displaying the affected node before the error message, separated by a colon. Localized error messages now preserve their defined spacing around the node link.
|
|
23
|
+
|
|
3
24
|
## 2.0.0-alpha.64
|
|
4
25
|
|
|
5
26
|
### Patch Changes
|
|
@@ -997,6 +1018,36 @@
|
|
|
997
1018
|
|
|
998
1019
|
- [#847](https://github.com/iTwin/presentation/pull/847): Moving tree rendering components to a new design systems.
|
|
999
1020
|
|
|
1021
|
+
## 1.11.6
|
|
1022
|
+
|
|
1023
|
+
### Patch Changes
|
|
1024
|
+
|
|
1025
|
+
- [#1543](https://github.com/iTwin/presentation/pull/1543): Update iTwin.js core dependencies to `^5.13.1` and refresh related tooling/test dependencies.
|
|
1026
|
+
- Updated dependencies:
|
|
1027
|
+
- @itwin/presentation-hierarchies@1.7.21
|
|
1028
|
+
- @itwin/presentation-shared@1.2.22
|
|
1029
|
+
- @itwin/unified-selection@1.8.6
|
|
1030
|
+
|
|
1031
|
+
## 1.11.5
|
|
1032
|
+
|
|
1033
|
+
### Patch Changes
|
|
1034
|
+
|
|
1035
|
+
- [#1500](https://github.com/iTwin/presentation/pull/1500): Update iTwin.js core dependencies to ^5.12.4 and refresh related tooling/test dependencies.
|
|
1036
|
+
- Updated dependencies:
|
|
1037
|
+
- @itwin/presentation-hierarchies@1.7.20
|
|
1038
|
+
- @itwin/presentation-shared@1.2.20
|
|
1039
|
+
- @itwin/unified-selection@1.8.5
|
|
1040
|
+
|
|
1041
|
+
## 1.11.4
|
|
1042
|
+
|
|
1043
|
+
### Patch Changes
|
|
1044
|
+
|
|
1045
|
+
- [#1473](https://github.com/iTwin/presentation/pull/1473): Bump dependencies.
|
|
1046
|
+
- Updated dependencies:
|
|
1047
|
+
- @itwin/presentation-hierarchies@1.7.19
|
|
1048
|
+
- @itwin/presentation-shared@1.2.19
|
|
1049
|
+
- @itwin/unified-selection@1.8.4
|
|
1050
|
+
|
|
1000
1051
|
## 1.11.3
|
|
1001
1052
|
|
|
1002
1053
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -65,17 +65,14 @@ The hook takes 2 required properties:
|
|
|
65
65
|
|
|
66
66
|
```tsx
|
|
67
67
|
import { IModelConnection } from "@itwin/core-frontend";
|
|
68
|
-
import { createCachingECClassHierarchyInspector } from "@itwin/presentation-shared";
|
|
69
68
|
import { createECSchemaProvider, createECSqlQueryExecutor, createIModelKey } from "@itwin/presentation-core-interop";
|
|
70
69
|
import { createLimitingECSqlQueryExecutor } from "@itwin/presentation-hierarchies";
|
|
71
70
|
|
|
72
71
|
function createIModelAccess(imodel: IModelConnection) {
|
|
73
|
-
const schemaProvider = createECSchemaProvider(imodel
|
|
72
|
+
const schemaProvider = createECSchemaProvider(imodel);
|
|
74
73
|
return {
|
|
75
74
|
imodelKey: createIModelKey(imodel),
|
|
76
75
|
...schemaProvider,
|
|
77
|
-
// while caching for hierarchy inspector is not mandatory, it's recommended to use it to improve performance
|
|
78
|
-
...createCachingECClassHierarchyInspector({ schemaProvider, cacheSize: 100 }),
|
|
79
76
|
// the second argument is the maximum number of rows the executor will return - this allows us to
|
|
80
77
|
// avoid creating hierarchy levels of insane size (expensive to us and useless to users)
|
|
81
78
|
...createLimitingECSqlQueryExecutor(createECSqlQueryExecutor(imodel), 1000),
|
|
@@ -109,7 +106,6 @@ The component renders a virtualized tree using the `Tree` component from `@strat
|
|
|
109
106
|
|
|
110
107
|
```tsx
|
|
111
108
|
import { IModelConnection } from "@itwin/core-frontend";
|
|
112
|
-
import { createCachingECClassHierarchyInspector } from "@itwin/presentation-shared";
|
|
113
109
|
import { createECSchemaProvider, createECSqlQueryExecutor, createIModelKey } from "@itwin/presentation-core-interop";
|
|
114
110
|
import { createLimitingECSqlQueryExecutor } from "@itwin/presentation-hierarchies";
|
|
115
111
|
|
|
@@ -121,12 +117,10 @@ import { useIModelUnifiedSelectionTree } from "@itwin/presentation-hierarchies-r
|
|
|
121
117
|
import { StrataKitRootErrorRenderer, StrataKitTreeRenderer } from "@itwin/presentation-hierarchies-react/stratakit";
|
|
122
118
|
|
|
123
119
|
function createIModelAccess(imodel: IModelConnection) {
|
|
124
|
-
const schemaProvider = createECSchemaProvider(imodel
|
|
120
|
+
const schemaProvider = createECSchemaProvider(imodel);
|
|
125
121
|
return {
|
|
126
122
|
imodelKey: createIModelKey(imodel),
|
|
127
123
|
...schemaProvider,
|
|
128
|
-
// while caching for hierarchy inspector is not mandatory, it's recommended to use it to improve performance
|
|
129
|
-
...createCachingECClassHierarchyInspector({ schemaProvider, cacheSize: 100 }),
|
|
130
124
|
// the second argument is the maximum number of rows the executor will return - this allows us to
|
|
131
125
|
// avoid creating hierarchy levels of insane size (expensive to us and useless to users)
|
|
132
126
|
...createLimitingECSqlQueryExecutor(createECSqlQueryExecutor(imodel), 1000),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UseIModelTree.js","names":["useCallback","createIModelHierarchyProvider","useTranslation","useTree","useUnifiedSelectionTree","HierarchyDefinition","HierarchySearchTree","Props","UseUnifiedTreeSelectionProps","UseTreeProps","UseTreeResult","IModelHierarchyProviderProps","IModelAccess","UseIModelTreeProps","Omit","Pick","getHierarchyDefinition","props","imodelAccess","getSearchPaths","abortSignal","AbortSignal","Promise","useIModelTree","$","_c","imodelChanged","rest","t0","t1","useIModelTreeProps","t2","useIModelUnifiedSelectionTree","translate","hierarchyDefinition","localizedStrings","other","unspecified","t3","t4","getHierarchyProvider"],"sources":["../../src/presentation-hierarchies-react/UseIModelTree.ts"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { useCallback } from \"react\";\nimport { createIModelHierarchyProvider } from \"@itwin/presentation-hierarchies\";\nimport { useTranslation } from \"./LocalizationContext.js\";\nimport { useTree, useUnifiedSelectionTree } from \"./UseTree.js\";\n\nimport type { HierarchyDefinition, HierarchySearchTree } from \"@itwin/presentation-hierarchies\";\nimport type { Props } from \"@itwin/presentation-shared\";\nimport type { UseUnifiedTreeSelectionProps } from \"./internal/UseUnifiedSelection.js\";\nimport type { UseTreeProps, UseTreeResult } from \"./UseTree.js\";\n\n/** @public */\ntype IModelHierarchyProviderProps = Props<typeof createIModelHierarchyProvider>;\n\n/** @public */\ntype IModelAccess = IModelHierarchyProviderProps[\"imodelAccess\"];\n\n/**\n * Props for `useIModelTree` and `useIModelUnifiedSelectionTree` hooks.\n * @public\n */\ntype UseIModelTreeProps = Omit<UseTreeProps, \"getHierarchyProvider\" | \"getSearchPaths\"> &\n Pick<IModelHierarchyProviderProps, \"imodelAccess\" | \"imodelChanged\"> & {\n /**\n * Provides the hierarchy definition for the tree.\n */\n getHierarchyDefinition: (props: { imodelAccess: IModelAccess }) => HierarchyDefinition;\n\n /**\n * Provides paths to target nodes.\n */\n getSearchPaths?: (props: {\n /**\n * Object that provides access to the iModel schema and can run queries against the iModel.\n */\n imodelAccess: IModelAccess;\n /**\n * Signal indicating that that the request was canceled\n */\n abortSignal: AbortSignal;\n }) => Promise<HierarchySearchTree[] | undefined>;\n };\n\n/**\n * A React hook that creates state for a tree component whose displayed hierarchy is based on\n * iModel data.\n *\n * The hook uses `@itwin/presentation-hierarchies` package to load the hierarchy data and returns a\n * component-agnostic result which may be used to render the hierarchy using any UI framework.\n *\n * See `README.md` for an example\n *\n * @see `useTree`\n * @see `useIModelUnifiedSelectionTree`\n * @public\n */\nexport function useIModelTree(props: UseIModelTreeProps): UseTreeResult {\n const { imodelAccess, imodelChanged, getHierarchyDefinition, getSearchPaths, ...rest } = props;\n return useTree({\n ...rest,\n ...useIModelTreeProps({ imodelAccess, imodelChanged, getHierarchyDefinition, getSearchPaths }),\n });\n}\n\n/**\n * A React hook that creates state for a tree component whose displayed hierarchy is based on\n * iModel data and that is integrated with unified selection through the given selection\n * storage (previously the storage was provided through the, now deprecated, `UnifiedSelectionProvider`).\n *\n * The hook uses `@itwin/presentation-hierarchies` package to load the hierarchy data and returns a\n * component-agnostic result which may be used to render the hierarchy using any UI framework.\n *\n * See `README.md` for an example\n *\n * @see `useIModelTree`\n * @see `useUnifiedSelectionTree`\n * @see `UnifiedSelectionProvider`\n * @public\n */\nexport function useIModelUnifiedSelectionTree(props: UseIModelTreeProps & UseUnifiedTreeSelectionProps): UseTreeResult {\n const { imodelAccess, imodelChanged, getHierarchyDefinition, getSearchPaths, ...rest } = props;\n return useUnifiedSelectionTree({\n ...rest,\n ...useIModelTreeProps({ imodelAccess, imodelChanged, getHierarchyDefinition, getSearchPaths }),\n });\n}\n\nfunction useIModelTreeProps(\n props: Pick<UseIModelTreeProps, \"imodelAccess\" | \"imodelChanged\" | \"getHierarchyDefinition\" | \"getSearchPaths\">,\n): Pick<UseTreeProps, \"getHierarchyProvider\" | \"getSearchPaths\"> {\n const { imodelAccess, imodelChanged, getHierarchyDefinition, getSearchPaths } = props;\n const translate = useTranslation();\n return {\n getHierarchyProvider: useCallback(\n () =>\n createIModelHierarchyProvider({\n imodelAccess,\n imodelChanged,\n hierarchyDefinition: getHierarchyDefinition({ imodelAccess }),\n localizedStrings: { other: translate(\"other\"), unspecified: translate(\"unspecified\") },\n }),\n [imodelAccess, imodelChanged, translate, getHierarchyDefinition],\n ),\n getSearchPaths: useCallback(\n async ({ abortSignal }: { abortSignal: AbortSignal }) => getSearchPaths?.({ imodelAccess, abortSignal }),\n [imodelAccess, getSearchPaths],\n ),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AA4DA,SAAOuB,cAAAN,OAAA;CAAA,MAAAO,IAAAC,EAAA,EAAA;CAAA,IAAAT;CAAA,IAAAG;CAAA,IAAAD;CAAA,IAAAQ;CAAA,IAAAC;CAAA,IAAAH,EAAA,OAAAP,OAAA;EACL,CAAA,CAAAC,cAAAQ,eAAAV,wBAAAG,
|
|
1
|
+
{"version":3,"file":"UseIModelTree.js","names":["useCallback","createIModelHierarchyProvider","useTranslation","useTree","useUnifiedSelectionTree","HierarchyDefinition","HierarchySearchTree","Props","UseUnifiedTreeSelectionProps","UseTreeProps","UseTreeResult","IModelHierarchyProviderProps","IModelAccess","UseIModelTreeProps","Omit","Pick","getHierarchyDefinition","props","imodelAccess","getSearchPaths","abortSignal","AbortSignal","Promise","useIModelTree","$","_c","imodelChanged","rest","t0","t1","useIModelTreeProps","t2","useIModelUnifiedSelectionTree","translate","hierarchyDefinition","localizedStrings","other","unspecified","t3","t4","getHierarchyProvider"],"sources":["../../src/presentation-hierarchies-react/UseIModelTree.ts"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { useCallback } from \"react\";\nimport { createIModelHierarchyProvider } from \"@itwin/presentation-hierarchies\";\nimport { useTranslation } from \"./LocalizationContext.js\";\nimport { useTree, useUnifiedSelectionTree } from \"./UseTree.js\";\n\nimport type { HierarchyDefinition, HierarchySearchTree } from \"@itwin/presentation-hierarchies\";\nimport type { Props } from \"@itwin/presentation-shared\";\nimport type { UseUnifiedTreeSelectionProps } from \"./internal/UseUnifiedSelection.js\";\nimport type { UseTreeProps, UseTreeResult } from \"./UseTree.js\";\n\n/** @public */\ntype IModelHierarchyProviderProps = Props<typeof createIModelHierarchyProvider>;\n\n/** @public */\ntype IModelAccess = IModelHierarchyProviderProps[\"imodelAccess\"];\n\n/**\n * Props for `useIModelTree` and `useIModelUnifiedSelectionTree` hooks.\n * @public\n */\ntype UseIModelTreeProps = Omit<UseTreeProps, \"getHierarchyProvider\" | \"getSearchPaths\"> &\n Pick<IModelHierarchyProviderProps, \"imodelAccess\" | \"imodelChanged\"> & {\n /**\n * Provides the hierarchy definition for the tree.\n */\n getHierarchyDefinition: (props: { imodelAccess: IModelAccess }) => HierarchyDefinition;\n\n /**\n * Provides paths to target nodes.\n */\n getSearchPaths?: (props: {\n /**\n * Object that provides access to the iModel schema and can run queries against the iModel.\n */\n imodelAccess: IModelAccess;\n /**\n * Signal indicating that that the request was canceled\n */\n abortSignal: AbortSignal;\n }) => Promise<HierarchySearchTree[] | undefined>;\n };\n\n/**\n * A React hook that creates state for a tree component whose displayed hierarchy is based on\n * iModel data.\n *\n * The hook uses `@itwin/presentation-hierarchies` package to load the hierarchy data and returns a\n * component-agnostic result which may be used to render the hierarchy using any UI framework.\n *\n * See `README.md` for an example\n *\n * @see `useTree`\n * @see `useIModelUnifiedSelectionTree`\n * @public\n */\nexport function useIModelTree(props: UseIModelTreeProps): UseTreeResult {\n const { imodelAccess, imodelChanged, getHierarchyDefinition, getSearchPaths, ...rest } = props;\n return useTree({\n ...rest,\n ...useIModelTreeProps({ imodelAccess, imodelChanged, getHierarchyDefinition, getSearchPaths }),\n });\n}\n\n/**\n * A React hook that creates state for a tree component whose displayed hierarchy is based on\n * iModel data and that is integrated with unified selection through the given selection\n * storage (previously the storage was provided through the, now deprecated, `UnifiedSelectionProvider`).\n *\n * The hook uses `@itwin/presentation-hierarchies` package to load the hierarchy data and returns a\n * component-agnostic result which may be used to render the hierarchy using any UI framework.\n *\n * See `README.md` for an example\n *\n * @see `useIModelTree`\n * @see `useUnifiedSelectionTree`\n * @see `UnifiedSelectionProvider`\n * @public\n */\nexport function useIModelUnifiedSelectionTree(props: UseIModelTreeProps & UseUnifiedTreeSelectionProps): UseTreeResult {\n const { imodelAccess, imodelChanged, getHierarchyDefinition, getSearchPaths, ...rest } = props;\n return useUnifiedSelectionTree({\n ...rest,\n ...useIModelTreeProps({ imodelAccess, imodelChanged, getHierarchyDefinition, getSearchPaths }),\n });\n}\n\nfunction useIModelTreeProps(\n props: Pick<UseIModelTreeProps, \"imodelAccess\" | \"imodelChanged\" | \"getHierarchyDefinition\" | \"getSearchPaths\">,\n): Pick<UseTreeProps, \"getHierarchyProvider\" | \"getSearchPaths\"> {\n const { imodelAccess, imodelChanged, getHierarchyDefinition, getSearchPaths } = props;\n const translate = useTranslation();\n return {\n getHierarchyProvider: useCallback(\n () =>\n createIModelHierarchyProvider({\n imodelAccess,\n imodelChanged,\n hierarchyDefinition: getHierarchyDefinition({ imodelAccess }),\n localizedStrings: { other: translate(\"other\"), unspecified: translate(\"unspecified\") },\n }),\n [imodelAccess, imodelChanged, translate, getHierarchyDefinition],\n ),\n getSearchPaths: useCallback(\n async ({ abortSignal }: { abortSignal: AbortSignal }) => getSearchPaths?.({ imodelAccess, abortSignal }),\n [imodelAccess, getSearchPaths],\n ),\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UseTree.js","names":["useCallback","useEffect","useMemo","useRef","useState","HierarchyNode","TreeActions","TreeModel","useUnifiedTreeSelection","safeDispose","useLatest","GenericInstanceFilter","HierarchyProvider","HierarchySearchTree","IPrimitiveValueFormatter","TreeModelHierarchyNode","TreeModelRootNode","UseUnifiedTreeSelectionProps","RootErrorRendererProps","TreeRendererProps","ErrorInfo","TreeNode","SelectionChangeType","useTree","props","$","_c","t0","useTreeInternal","rest","getTreeModelNode","_","t1","useUnifiedSelectionTree","createSelectableForGenericNode","selectionStorage","sourceName","t2","selectionProps","rootErrorRendererProps","undefined","treeRendererProps","rootNodes","t3","t4","UseTreeProps","getHierarchyProvider","getSearchPaths","abortSignal","AbortSignal","Promise","onPerformanceMeasured","action","duration","onHierarchyLimitExceeded","parentId","filter","limit","onHierarchyLoadError","type","error","getTreeNodeErrors","node","UseTreeResult","isReloading","getNode","nodeId","setFormatter","formatter","RendererProps","TreeState","model","Array","state","setState","idToNode","Map","parentChildMap","rootNode","id","nodeData","onPerformanceMeasuredRef","onHierarchyLimitExceededRef","onHierarchyLoadErrorRef","getTreeNodeErrorsRef","actions","get","generateTreeStructure","current","actionType","currentFormatter","hierarchyProvider","setHierarchyProvider","provider","removeHierarchyChangedListener","hierarchyChanged","addListener","hierarchyChangeArgs","shouldDiscardState","searchChange","newSearch","reloadTree","reset","isSearching","setIsSearching","disposed","controller","AbortController","setHierarchySearch","paths","signal","abort","createTreeNode","expandNode","isExpanded","options","selectNodes","nodeIds","changeType","isNodeSelected","getHierarchyLevelDetails","hierarchyNode","isGroupingNode","getInstanceKeysIterator","getNodeInstanceKeys","parentNode","instanceFilter","hierarchyLevelSizeLimit","setInstanceFilter","sizeLimit","hierarchyLimit","setSizeLimit","value","setHierarchyLimit","renderProps","isLoading","parentNodeId","currentChildren","map","childId","modelNode","allErrors","children","label","isFilterable","supportsFiltering","isFiltered","errors"],"sources":["../../src/presentation-hierarchies-react/UseTree.ts"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { TreeActions } from \"./internal/TreeActions.js\";\nimport { TreeModel } from \"./internal/TreeModel.js\";\nimport { useUnifiedTreeSelection } from \"./internal/UseUnifiedSelection.js\";\nimport { safeDispose } from \"./internal/Utils.js\";\nimport { useLatest } from \"./Utils.js\";\n\nimport type { GenericInstanceFilter, HierarchyProvider, HierarchySearchTree } from \"@itwin/presentation-hierarchies\";\nimport type { IPrimitiveValueFormatter } from \"@itwin/presentation-shared\";\nimport type { TreeModelHierarchyNode, TreeModelRootNode } from \"./internal/TreeModel.js\";\nimport type { UseUnifiedTreeSelectionProps } from \"./internal/UseUnifiedSelection.js\";\nimport type { RootErrorRendererProps, TreeRendererProps } from \"./Renderers.js\";\nimport type { ErrorInfo, TreeNode } from \"./TreeNode.js\";\nimport type { SelectionChangeType } from \"./UseSelectionHandler.js\";\n\n/**\n * A React hook that creates state for a tree component.\n *\n * The hook uses `@itwin/presentation-hierarchies` package to load the hierarchy data and returns a\n * component-agnostic result which may be used to render the hierarchy using any UI framework.\n *\n * See `README.md` for an example\n *\n * @see `useUnifiedSelectionTree`\n * @see `useIModelTree`\n * @public\n */\nexport function useTree(props: UseTreeProps): UseTreeResult {\n const { getTreeModelNode: _, ...rest } = useTreeInternal(props);\n return rest;\n}\n\n/**\n * A React hook that creates state for a tree component, that is integrated with unified selection\n * through the given selection storage (previously the storage was provided through the, now\n * deprecated, `UnifiedSelectionProvider`).\n *\n * The hook uses `@itwin/presentation-hierarchies` package to load the hierarchy data and returns a\n * component-agnostic result which may be used to render the hierarchy using any UI framework.\n *\n * See `README.md` for an example\n *\n * @see `useTree`\n * @see `useIModelUnifiedSelectionTree`\n * @see `UnifiedSelectionProvider`\n * @public\n */\nexport function useUnifiedSelectionTree({\n sourceName,\n selectionStorage,\n createSelectableForGenericNode,\n ...props\n}: UseTreeProps & UseUnifiedTreeSelectionProps): UseTreeResult {\n const { getTreeModelNode, ...rest } = useTreeInternal(props);\n const selectionProps = useUnifiedTreeSelection({\n sourceName,\n selectionStorage,\n getTreeModelNode,\n createSelectableForGenericNode,\n });\n if (rest.rootErrorRendererProps === undefined && rest.treeRendererProps?.rootNodes) {\n return { ...rest, treeRendererProps: { ...rest.treeRendererProps, ...selectionProps } };\n }\n return rest;\n}\n\n/** @public */\nexport interface UseTreeProps {\n /** Provides the hierarchy provider for the tree. */\n getHierarchyProvider: () => HierarchyProvider;\n /** Provides paths to search nodes. */\n getSearchPaths?: ({ abortSignal }: { abortSignal: AbortSignal }) => Promise<HierarchySearchTree[] | undefined>;\n /**\n * Callback that is called just after a certain action is finished.\n * Can be used for performance tracking.\n */\n onPerformanceMeasured?: (action: \"initial-load\" | \"hierarchy-level-load\" | \"reload\", duration: number) => void;\n /** Action to perform when hierarchy level contains more items that the specified limit. */\n onHierarchyLimitExceeded?: (props: {\n parentId?: string;\n filter?: GenericInstanceFilter;\n limit?: number | \"unbounded\";\n }) => void;\n /** Action to perform when an error occurs while loading hierarchy. */\n onHierarchyLoadError?: (props: { parentId?: string; type: \"timeout\" | \"unknown\"; error: unknown }) => void;\n /**\n * Callback to set custom TreeNode errors.\n * Errors returned from this callback are combined with internal errors when populating `TreeNode.errors`.\n */\n getTreeNodeErrors?: (node: HierarchyNode) => ErrorInfo[];\n}\n\n/** @public */\nexport type UseTreeResult = {\n /**\n * Specifies whether tree is reloading or not. It is set to `false` when initial tree load is in progress to check if\n * or tree is reloading.\n */\n isReloading: boolean;\n /**\n * Get a tree node by id\n */\n getNode: (nodeId: string) => TreeNode | undefined;\n /**\n * Sets a formatter for the primitive values that are displayed in the hierarchy.\n */\n setFormatter: (formatter: IPrimitiveValueFormatter | undefined) => void;\n} & RendererProps;\n\n/**.\n * @alpha\n */\ntype RendererProps =\n | {\n /**\n * An object containing information used to render root error handling UI.\n * Use in combination with `RootErrorRenderer` or your custom implementation.\n * Defined when root nodes fail to load.\n */\n rootErrorRendererProps: RootErrorRendererProps;\n }\n | {\n /** Is undefined when rootNodes were successfully loaded or are in initial loading process. */\n rootErrorRendererProps: undefined;\n /**\n * An object containing information used to render tree.\n * Use with `TreeRenderer` or your custom implementation.\n * Is undefined on initial loading process.\n */\n treeRendererProps?: TreeRendererProps;\n };\n\ninterface TreeState {\n model: TreeModel;\n rootNodes: Array<TreeNode> | undefined;\n}\n\nfunction useTreeInternal({\n getHierarchyProvider,\n getSearchPaths,\n onPerformanceMeasured,\n onHierarchyLimitExceeded,\n onHierarchyLoadError,\n getTreeNodeErrors,\n}: UseTreeProps): UseTreeResult & {\n getTreeModelNode: (nodeId: string) => TreeModelRootNode | TreeModelHierarchyNode | undefined;\n} {\n const [state, setState] = useState<TreeState>({\n model: { idToNode: new Map(), parentChildMap: new Map(), rootNode: { id: undefined, nodeData: undefined } },\n rootNodes: undefined,\n });\n const onPerformanceMeasuredRef = useLatest(onPerformanceMeasured);\n const onHierarchyLimitExceededRef = useLatest(onHierarchyLimitExceeded);\n const onHierarchyLoadErrorRef = useLatest(onHierarchyLoadError);\n const getTreeNodeErrorsRef = useLatest(getTreeNodeErrors);\n\n const [actions] = useState<TreeActions>(\n // eslint-disable-next-line react-hooks/refs\n () =>\n new TreeActions(\n (model) => {\n const rootNodes =\n model.parentChildMap.get(undefined) !== undefined\n ? generateTreeStructure(undefined, model, getTreeNodeErrorsRef.current)\n : undefined;\n setState({ model, rootNodes });\n },\n (actionType, duration) => onPerformanceMeasuredRef.current?.(actionType, duration),\n (props) => onHierarchyLimitExceededRef.current?.(props),\n (props) => onHierarchyLoadErrorRef.current?.(props),\n ),\n );\n const currentFormatter = useRef<IPrimitiveValueFormatter | undefined>(undefined);\n\n const [hierarchyProvider, setHierarchyProvider] = useState<HierarchyProvider | undefined>();\n useEffect(() => {\n const provider = getHierarchyProvider();\n provider.setFormatter(currentFormatter.current);\n const removeHierarchyChangedListener = provider.hierarchyChanged.addListener((hierarchyChangeArgs) => {\n const shouldDiscardState = hierarchyChangeArgs.searchChange?.newSearch !== undefined;\n actions.reloadTree({ state: shouldDiscardState ? \"discard\" : \"keep\" });\n });\n actions.setHierarchyProvider(provider);\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setHierarchyProvider(provider);\n return () => {\n removeHierarchyChangedListener();\n actions.reset();\n safeDispose(provider);\n };\n }, [actions, getHierarchyProvider]);\n\n const [isSearching, setIsSearching] = useState(false);\n useEffect(() => {\n let disposed = false as boolean;\n const controller = new AbortController();\n void (async () => {\n if (!hierarchyProvider) {\n return;\n }\n\n if (!getSearchPaths) {\n hierarchyProvider.setHierarchySearch(undefined);\n // reload tree in case hierarchy provider does not use hierarchy search to load initial nodes\n actions.reloadTree({ state: \"keep\" });\n setIsSearching(false);\n return;\n }\n\n setIsSearching(true);\n let paths: HierarchySearchTree[] | undefined;\n try {\n paths = await getSearchPaths({ abortSignal: controller.signal });\n } catch {\n } finally {\n if (!disposed) {\n hierarchyProvider.setHierarchySearch(paths ? { paths } : undefined);\n setIsSearching(false);\n }\n }\n })();\n return () => {\n controller.abort();\n disposed = true;\n };\n }, [hierarchyProvider, getSearchPaths, actions]);\n\n const getTreeModelNode = useCallback<(nodeId: string) => TreeModelRootNode | TreeModelHierarchyNode | undefined>(\n (nodeId: string) => {\n return actions.getNode(nodeId);\n },\n [actions],\n );\n\n const getNode = useCallback(\n (nodeId: string): TreeNode | undefined => {\n const node = actions.getNode(nodeId);\n if (!node || node.id === undefined) {\n return undefined;\n }\n return createTreeNode(node, state.model, getTreeNodeErrorsRef.current);\n },\n [actions, getTreeNodeErrorsRef, state.model],\n );\n\n const expandNode = useCallback<TreeRendererProps[\"expandNode\"]>(\n (nodeId: string, isExpanded: boolean) => {\n actions.expandNode(nodeId, isExpanded);\n },\n [actions],\n );\n\n const reloadTree = useCallback<TreeRendererProps[\"reloadTree\"]>(\n (options) => {\n actions.reloadTree(options);\n },\n [actions],\n );\n\n const selectNodes = useCallback<TreeRendererProps[\"selectNodes\"]>(\n (nodeIds: Array<string>, changeType: SelectionChangeType) => {\n actions.selectNodes(nodeIds, changeType);\n },\n [actions],\n );\n\n const isNodeSelected = useCallback<TreeRendererProps[\"isNodeSelected\"]>(\n (nodeId: string) => TreeModel.isNodeSelected(state.model, nodeId),\n [state],\n );\n\n const setFormatter = useCallback<UseTreeResult[\"setFormatter\"]>(\n (formatter: IPrimitiveValueFormatter | undefined) => {\n currentFormatter.current = formatter;\n if (!hierarchyProvider) {\n return;\n }\n\n hierarchyProvider.setFormatter(formatter);\n },\n [hierarchyProvider],\n );\n\n const getHierarchyLevelDetails = useCallback<TreeRendererProps[\"getHierarchyLevelDetails\"]>(\n (nodeId) => {\n const node = actions.getNode(nodeId);\n if (!hierarchyProvider || !node) {\n return undefined;\n }\n const hierarchyNode = node.nodeData;\n if (hierarchyNode && HierarchyNode.isGroupingNode(hierarchyNode)) {\n return undefined;\n }\n\n return {\n hierarchyNode,\n getInstanceKeysIterator: (props) =>\n hierarchyProvider.getNodeInstanceKeys({\n parentNode: hierarchyNode,\n instanceFilter: props?.instanceFilter,\n hierarchyLevelSizeLimit: props?.hierarchyLevelSizeLimit,\n }),\n instanceFilter: node.instanceFilter,\n setInstanceFilter: (filter) => actions.setInstanceFilter(nodeId, filter),\n sizeLimit: node.hierarchyLimit,\n setSizeLimit: (value) => actions.setHierarchyLimit(nodeId, value),\n };\n },\n [actions, hierarchyProvider],\n );\n\n const renderProps: RendererProps = useMemo(() => {\n if (state.model.rootNode.error) {\n return { rootErrorRendererProps: { error: state.model.rootNode.error, reloadTree, getHierarchyLevelDetails } };\n }\n return {\n rootErrorRendererProps: undefined,\n treeRendererProps: state.rootNodes\n ? { rootNodes: state.rootNodes, expandNode, selectNodes, isNodeSelected, reloadTree, getHierarchyLevelDetails }\n : undefined,\n };\n }, [\n expandNode,\n getHierarchyLevelDetails,\n isNodeSelected,\n reloadTree,\n selectNodes,\n state.model.rootNode.error,\n state.rootNodes,\n ]);\n\n return {\n ...renderProps,\n isReloading: !!state.model.rootNode.isLoading || isSearching,\n getTreeModelNode,\n getNode,\n setFormatter,\n };\n}\n\nfunction generateTreeStructure(\n parentNodeId: string | undefined,\n model: TreeModel,\n getTreeNodeErrors?: (node: HierarchyNode) => ErrorInfo[],\n): Array<TreeNode> | undefined {\n const currentChildren = model.parentChildMap.get(parentNodeId);\n if (!currentChildren) {\n return undefined;\n }\n\n return currentChildren\n .map((childId) => model.idToNode.get(childId))\n .filter((node): node is TreeModelHierarchyNode => !!node)\n .map<TreeNode>((node) => {\n return createTreeNode(node, model, getTreeNodeErrors);\n });\n}\n\nfunction createTreeNode(\n modelNode: TreeModelHierarchyNode,\n model: TreeModel,\n getTreeNodeErrors?: (node: HierarchyNode) => ErrorInfo[],\n): TreeNode {\n const allErrors = [\n // internal errors\n ...(modelNode.error ? [modelNode.error] : []),\n // external errors\n ...(getTreeNodeErrors?.(modelNode.nodeData) ?? []),\n ];\n\n let children: Array<TreeNode> | undefined;\n return {\n id: modelNode.id,\n label: modelNode.label,\n nodeData: modelNode.nodeData,\n isLoading: !!modelNode.isLoading,\n isExpanded: !!modelNode.isExpanded,\n isFilterable:\n !HierarchyNode.isGroupingNode(modelNode.nodeData) && !!modelNode.nodeData.supportsFiltering && modelNode.children,\n isFiltered: !!modelNode.instanceFilter,\n errors: allErrors,\n get children() {\n if (!children) {\n children = generateTreeStructure(modelNode.id, model, getTreeNodeErrors);\n }\n return children ? children : modelNode.children === true ? true : [];\n },\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UseTree.js","names":["useCallback","useEffect","useMemo","useRef","useState","HierarchyNode","TreeActions","TreeModel","useUnifiedTreeSelection","safeDispose","useLatest","GenericInstanceFilter","HierarchyProvider","HierarchySearchTree","IPrimitiveValueFormatter","TreeModelHierarchyNode","TreeModelRootNode","UseUnifiedTreeSelectionProps","RootErrorRendererProps","TreeRendererProps","ErrorInfo","TreeNode","SelectionChangeType","useTree","props","$","_c","t0","useTreeInternal","rest","getTreeModelNode","_","t1","useUnifiedSelectionTree","createSelectableForGenericNode","selectionStorage","sourceName","t2","selectionProps","rootErrorRendererProps","undefined","treeRendererProps","rootNodes","t3","t4","UseTreeProps","getHierarchyProvider","getSearchPaths","abortSignal","AbortSignal","Promise","onPerformanceMeasured","action","duration","onHierarchyLimitExceeded","parentId","filter","limit","onHierarchyLoadError","type","error","getTreeNodeErrors","node","UseTreeResult","isReloading","getNode","nodeId","setFormatter","formatter","RendererProps","TreeState","model","Array","state","setState","idToNode","Map","parentChildMap","rootNode","id","nodeData","onPerformanceMeasuredRef","onHierarchyLimitExceededRef","onHierarchyLoadErrorRef","getTreeNodeErrorsRef","actions","get","generateTreeStructure","current","actionType","currentFormatter","hierarchyProvider","setHierarchyProvider","provider","removeHierarchyChangedListener","hierarchyChanged","addListener","hierarchyChangeArgs","shouldDiscardState","searchChange","newSearch","reloadTree","reset","isSearching","setIsSearching","disposed","controller","AbortController","setHierarchySearch","paths","signal","abort","createTreeNode","expandNode","isExpanded","options","selectNodes","nodeIds","changeType","isNodeSelected","getHierarchyLevelDetails","hierarchyNode","isGroupingNode","getInstanceKeysIterator","getNodeInstanceKeys","parentNode","instanceFilter","hierarchyLevelSizeLimit","setInstanceFilter","sizeLimit","hierarchyLimit","setSizeLimit","value","setHierarchyLimit","renderProps","isLoading","parentNodeId","currentChildren","map","childId","modelNode","allErrors","children","label","isFilterable","supportsFiltering","isFiltered","errors"],"sources":["../../src/presentation-hierarchies-react/UseTree.ts"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { TreeActions } from \"./internal/TreeActions.js\";\nimport { TreeModel } from \"./internal/TreeModel.js\";\nimport { useUnifiedTreeSelection } from \"./internal/UseUnifiedSelection.js\";\nimport { safeDispose } from \"./internal/Utils.js\";\nimport { useLatest } from \"./Utils.js\";\n\nimport type { GenericInstanceFilter, HierarchyProvider, HierarchySearchTree } from \"@itwin/presentation-hierarchies\";\nimport type { IPrimitiveValueFormatter } from \"@itwin/presentation-shared\";\nimport type { TreeModelHierarchyNode, TreeModelRootNode } from \"./internal/TreeModel.js\";\nimport type { UseUnifiedTreeSelectionProps } from \"./internal/UseUnifiedSelection.js\";\nimport type { RootErrorRendererProps, TreeRendererProps } from \"./Renderers.js\";\nimport type { ErrorInfo, TreeNode } from \"./TreeNode.js\";\nimport type { SelectionChangeType } from \"./UseSelectionHandler.js\";\n\n/**\n * A React hook that creates state for a tree component.\n *\n * The hook uses `@itwin/presentation-hierarchies` package to load the hierarchy data and returns a\n * component-agnostic result which may be used to render the hierarchy using any UI framework.\n *\n * See `README.md` for an example\n *\n * @see `useUnifiedSelectionTree`\n * @see `useIModelTree`\n * @public\n */\nexport function useTree(props: UseTreeProps): UseTreeResult {\n const { getTreeModelNode: _, ...rest } = useTreeInternal(props);\n return rest;\n}\n\n/**\n * A React hook that creates state for a tree component, that is integrated with unified selection\n * through the given selection storage (previously the storage was provided through the, now\n * deprecated, `UnifiedSelectionProvider`).\n *\n * The hook uses `@itwin/presentation-hierarchies` package to load the hierarchy data and returns a\n * component-agnostic result which may be used to render the hierarchy using any UI framework.\n *\n * See `README.md` for an example\n *\n * @see `useTree`\n * @see `useIModelUnifiedSelectionTree`\n * @see `UnifiedSelectionProvider`\n * @public\n */\nexport function useUnifiedSelectionTree({\n sourceName,\n selectionStorage,\n createSelectableForGenericNode,\n ...props\n}: UseTreeProps & UseUnifiedTreeSelectionProps): UseTreeResult {\n const { getTreeModelNode, ...rest } = useTreeInternal(props);\n const selectionProps = useUnifiedTreeSelection({\n sourceName,\n selectionStorage,\n getTreeModelNode,\n createSelectableForGenericNode,\n });\n if (rest.rootErrorRendererProps === undefined && rest.treeRendererProps?.rootNodes) {\n return { ...rest, treeRendererProps: { ...rest.treeRendererProps, ...selectionProps } };\n }\n return rest;\n}\n\n/** @public */\nexport interface UseTreeProps {\n /** Provides the hierarchy provider for the tree. */\n getHierarchyProvider: () => HierarchyProvider;\n /** Provides paths to search nodes. */\n getSearchPaths?: ({ abortSignal }: { abortSignal: AbortSignal }) => Promise<HierarchySearchTree[] | undefined>;\n /**\n * Callback that is called just after a certain action is finished.\n * Can be used for performance tracking.\n */\n onPerformanceMeasured?: (action: \"initial-load\" | \"hierarchy-level-load\" | \"reload\", duration: number) => void;\n /** Action to perform when hierarchy level contains more items that the specified limit. */\n onHierarchyLimitExceeded?: (props: {\n parentId?: string;\n filter?: GenericInstanceFilter;\n limit?: number | \"unbounded\";\n }) => void;\n /** Action to perform when an error occurs while loading hierarchy. */\n onHierarchyLoadError?: (props: { parentId?: string; type: \"timeout\" | \"unknown\"; error: unknown }) => void;\n /**\n * Callback to set custom TreeNode errors.\n * Errors returned from this callback are combined with internal errors when populating `TreeNode.errors`.\n */\n getTreeNodeErrors?: (node: HierarchyNode) => ErrorInfo[];\n}\n\n/** @public */\nexport type UseTreeResult = {\n /**\n * Specifies whether tree is reloading or not. It is set to `false` when initial tree load is in progress to check if\n * or tree is reloading.\n */\n isReloading: boolean;\n /**\n * Get a tree node by id\n */\n getNode: (nodeId: string) => TreeNode | undefined;\n /**\n * Sets a formatter for the primitive values that are displayed in the hierarchy.\n */\n setFormatter: (formatter: IPrimitiveValueFormatter | undefined) => void;\n} & RendererProps;\n\n/**.\n * @alpha\n */\ntype RendererProps =\n | {\n /**\n * An object containing information used to render root error handling UI.\n * Use in combination with `RootErrorRenderer` or your custom implementation.\n * Defined when root nodes fail to load.\n */\n rootErrorRendererProps: RootErrorRendererProps;\n }\n | {\n /** Is undefined when rootNodes were successfully loaded or are in initial loading process. */\n rootErrorRendererProps: undefined;\n /**\n * An object containing information used to render tree.\n * Use with `TreeRenderer` or your custom implementation.\n * Is undefined on initial loading process.\n */\n treeRendererProps?: TreeRendererProps;\n };\n\ninterface TreeState {\n model: TreeModel;\n rootNodes: Array<TreeNode> | undefined;\n}\n\nfunction useTreeInternal({\n getHierarchyProvider,\n getSearchPaths,\n onPerformanceMeasured,\n onHierarchyLimitExceeded,\n onHierarchyLoadError,\n getTreeNodeErrors,\n}: UseTreeProps): UseTreeResult & {\n getTreeModelNode: (nodeId: string) => TreeModelRootNode | TreeModelHierarchyNode | undefined;\n} {\n const [state, setState] = useState<TreeState>({\n model: { idToNode: new Map(), parentChildMap: new Map(), rootNode: { id: undefined, nodeData: undefined } },\n rootNodes: undefined,\n });\n const onPerformanceMeasuredRef = useLatest(onPerformanceMeasured);\n const onHierarchyLimitExceededRef = useLatest(onHierarchyLimitExceeded);\n const onHierarchyLoadErrorRef = useLatest(onHierarchyLoadError);\n const getTreeNodeErrorsRef = useLatest(getTreeNodeErrors);\n\n const [actions] = useState<TreeActions>(\n // eslint-disable-next-line react-hooks/refs\n () =>\n new TreeActions(\n (model) => {\n const rootNodes =\n model.parentChildMap.get(undefined) !== undefined\n ? generateTreeStructure(undefined, model, getTreeNodeErrorsRef.current)\n : undefined;\n setState({ model, rootNodes });\n },\n (actionType, duration) => onPerformanceMeasuredRef.current?.(actionType, duration),\n (props) => onHierarchyLimitExceededRef.current?.(props),\n (props) => onHierarchyLoadErrorRef.current?.(props),\n ),\n );\n const currentFormatter = useRef<IPrimitiveValueFormatter | undefined>(undefined);\n\n const [hierarchyProvider, setHierarchyProvider] = useState<HierarchyProvider | undefined>();\n useEffect(() => {\n const provider = getHierarchyProvider();\n provider.setFormatter(currentFormatter.current);\n const removeHierarchyChangedListener = provider.hierarchyChanged.addListener((hierarchyChangeArgs) => {\n const shouldDiscardState = hierarchyChangeArgs.searchChange?.newSearch !== undefined;\n actions.reloadTree({ state: shouldDiscardState ? \"discard\" : \"keep\" });\n });\n actions.setHierarchyProvider(provider);\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setHierarchyProvider(provider);\n return () => {\n removeHierarchyChangedListener();\n actions.reset();\n safeDispose(provider);\n };\n }, [actions, getHierarchyProvider]);\n\n const [isSearching, setIsSearching] = useState(false);\n useEffect(() => {\n let disposed = false as boolean;\n const controller = new AbortController();\n void (async () => {\n if (!hierarchyProvider) {\n return;\n }\n\n if (!getSearchPaths) {\n hierarchyProvider.setHierarchySearch(undefined);\n // reload tree in case hierarchy provider does not use hierarchy search to load initial nodes\n actions.reloadTree({ state: \"keep\" });\n setIsSearching(false);\n return;\n }\n\n setIsSearching(true);\n let paths: HierarchySearchTree[] | undefined;\n try {\n paths = await getSearchPaths({ abortSignal: controller.signal });\n } catch {\n } finally {\n if (!disposed) {\n hierarchyProvider.setHierarchySearch(paths ? { paths } : undefined);\n setIsSearching(false);\n }\n }\n })();\n return () => {\n controller.abort();\n disposed = true;\n };\n }, [hierarchyProvider, getSearchPaths, actions]);\n\n const getTreeModelNode = useCallback<(nodeId: string) => TreeModelRootNode | TreeModelHierarchyNode | undefined>(\n (nodeId: string) => {\n return actions.getNode(nodeId);\n },\n [actions],\n );\n\n const getNode = useCallback(\n (nodeId: string): TreeNode | undefined => {\n const node = actions.getNode(nodeId);\n if (!node || node.id === undefined) {\n return undefined;\n }\n return createTreeNode(node, state.model, getTreeNodeErrorsRef.current);\n },\n [actions, getTreeNodeErrorsRef, state.model],\n );\n\n const expandNode = useCallback<TreeRendererProps[\"expandNode\"]>(\n (nodeId: string, isExpanded: boolean) => {\n actions.expandNode(nodeId, isExpanded);\n },\n [actions],\n );\n\n const reloadTree = useCallback<TreeRendererProps[\"reloadTree\"]>(\n (options) => {\n actions.reloadTree(options);\n },\n [actions],\n );\n\n const selectNodes = useCallback<TreeRendererProps[\"selectNodes\"]>(\n (nodeIds: Array<string>, changeType: SelectionChangeType) => {\n actions.selectNodes(nodeIds, changeType);\n },\n [actions],\n );\n\n const isNodeSelected = useCallback<TreeRendererProps[\"isNodeSelected\"]>(\n (nodeId: string) => TreeModel.isNodeSelected(state.model, nodeId),\n [state],\n );\n\n const setFormatter = useCallback<UseTreeResult[\"setFormatter\"]>(\n (formatter: IPrimitiveValueFormatter | undefined) => {\n currentFormatter.current = formatter;\n if (!hierarchyProvider) {\n return;\n }\n\n hierarchyProvider.setFormatter(formatter);\n },\n [hierarchyProvider],\n );\n\n const getHierarchyLevelDetails = useCallback<TreeRendererProps[\"getHierarchyLevelDetails\"]>(\n (nodeId) => {\n const node = actions.getNode(nodeId);\n if (!hierarchyProvider || !node) {\n return undefined;\n }\n const hierarchyNode = node.nodeData;\n if (hierarchyNode && HierarchyNode.isGroupingNode(hierarchyNode)) {\n return undefined;\n }\n\n return {\n hierarchyNode,\n getInstanceKeysIterator: (props) =>\n hierarchyProvider.getNodeInstanceKeys({\n parentNode: hierarchyNode,\n instanceFilter: props?.instanceFilter,\n hierarchyLevelSizeLimit: props?.hierarchyLevelSizeLimit,\n }),\n instanceFilter: node.instanceFilter,\n setInstanceFilter: (filter) => actions.setInstanceFilter(nodeId, filter),\n sizeLimit: node.hierarchyLimit,\n setSizeLimit: (value) => actions.setHierarchyLimit(nodeId, value),\n };\n },\n [actions, hierarchyProvider],\n );\n\n const renderProps: RendererProps = useMemo(() => {\n if (state.model.rootNode.error) {\n return { rootErrorRendererProps: { error: state.model.rootNode.error, reloadTree, getHierarchyLevelDetails } };\n }\n return {\n rootErrorRendererProps: undefined,\n treeRendererProps: state.rootNodes\n ? { rootNodes: state.rootNodes, expandNode, selectNodes, isNodeSelected, reloadTree, getHierarchyLevelDetails }\n : undefined,\n };\n }, [\n expandNode,\n getHierarchyLevelDetails,\n isNodeSelected,\n reloadTree,\n selectNodes,\n state.model.rootNode.error,\n state.rootNodes,\n ]);\n\n return {\n ...renderProps,\n isReloading: !!state.model.rootNode.isLoading || isSearching,\n getTreeModelNode,\n getNode,\n setFormatter,\n };\n}\n\nfunction generateTreeStructure(\n parentNodeId: string | undefined,\n model: TreeModel,\n getTreeNodeErrors?: (node: HierarchyNode) => ErrorInfo[],\n): Array<TreeNode> | undefined {\n const currentChildren = model.parentChildMap.get(parentNodeId);\n if (!currentChildren) {\n return undefined;\n }\n\n return currentChildren\n .map((childId) => model.idToNode.get(childId))\n .filter((node): node is TreeModelHierarchyNode => !!node)\n .map<TreeNode>((node) => {\n return createTreeNode(node, model, getTreeNodeErrors);\n });\n}\n\nfunction createTreeNode(\n modelNode: TreeModelHierarchyNode,\n model: TreeModel,\n getTreeNodeErrors?: (node: HierarchyNode) => ErrorInfo[],\n): TreeNode {\n const allErrors = [\n // internal errors\n ...(modelNode.error ? [modelNode.error] : []),\n // external errors\n ...(getTreeNodeErrors?.(modelNode.nodeData) ?? []),\n ];\n\n let children: Array<TreeNode> | undefined;\n return {\n id: modelNode.id,\n label: modelNode.label,\n nodeData: modelNode.nodeData,\n isLoading: !!modelNode.isLoading,\n isExpanded: !!modelNode.isExpanded,\n isFilterable:\n !HierarchyNode.isGroupingNode(modelNode.nodeData) && !!modelNode.nodeData.supportsFiltering && modelNode.children,\n isFiltered: !!modelNode.instanceFilter,\n errors: allErrors,\n get children() {\n if (!children) {\n children = generateTreeStructure(modelNode.id, model, getTreeNodeErrors);\n }\n return children ? children : modelNode.children === true ? true : [];\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -324,34 +324,29 @@ function _temp3(t0) {
|
|
|
324
324
|
return condition();
|
|
325
325
|
}
|
|
326
326
|
function MessageWithLink(t0) {
|
|
327
|
-
const $ = c(
|
|
327
|
+
const $ = c(14);
|
|
328
328
|
const { linkLabel, scrollToElement, message } = t0;
|
|
329
|
-
let firstPart;
|
|
330
329
|
let t1;
|
|
331
330
|
if ($[0] !== message) {
|
|
332
|
-
|
|
333
|
-
firstPart = splitMessage[0].trimEnd();
|
|
334
|
-
t1 = splitMessage[1]?.trimStart();
|
|
331
|
+
t1 = message.split("{{node}}", 2);
|
|
335
332
|
$[0] = message;
|
|
336
|
-
$[1] =
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
}
|
|
342
|
-
const secondPart = t1;
|
|
333
|
+
$[1] = t1;
|
|
334
|
+
} else t1 = $[1];
|
|
335
|
+
const splitMessage = t1;
|
|
336
|
+
const firstPart = splitMessage[0];
|
|
337
|
+
const secondPart = splitMessage.length > 1 ? splitMessage[1] : void 0;
|
|
343
338
|
let t2;
|
|
344
|
-
if ($[
|
|
339
|
+
if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
345
340
|
t2 = /* @__PURE__ */ jsx("button", { type: "button" });
|
|
346
|
-
$[
|
|
347
|
-
} else t2 = $[
|
|
341
|
+
$[2] = t2;
|
|
342
|
+
} else t2 = $[2];
|
|
348
343
|
let t3;
|
|
349
|
-
if ($[
|
|
344
|
+
if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
|
|
350
345
|
t3 = { verticalAlign: "baseline" };
|
|
351
|
-
$[
|
|
352
|
-
} else t3 = $[
|
|
346
|
+
$[3] = t3;
|
|
347
|
+
} else t3 = $[3];
|
|
353
348
|
let t4;
|
|
354
|
-
if ($[
|
|
349
|
+
if ($[4] !== linkLabel || $[5] !== scrollToElement) {
|
|
355
350
|
t4 = /* @__PURE__ */ jsx(Link, {
|
|
356
351
|
render: t2,
|
|
357
352
|
onClick: scrollToElement,
|
|
@@ -359,28 +354,39 @@ function MessageWithLink(t0) {
|
|
|
359
354
|
style: t3,
|
|
360
355
|
children: linkLabel
|
|
361
356
|
});
|
|
362
|
-
$[
|
|
363
|
-
$[
|
|
364
|
-
$[
|
|
365
|
-
} else t4 = $[
|
|
366
|
-
const
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
357
|
+
$[4] = linkLabel;
|
|
358
|
+
$[5] = scrollToElement;
|
|
359
|
+
$[6] = t4;
|
|
360
|
+
} else t4 = $[6];
|
|
361
|
+
const linkToNode = t4;
|
|
362
|
+
if (message.length === firstPart.length) {
|
|
363
|
+
let t5;
|
|
364
|
+
if ($[7] !== firstPart || $[8] !== linkToNode) {
|
|
365
|
+
t5 = /* @__PURE__ */ jsxs("div", { children: [
|
|
366
|
+
linkToNode,
|
|
367
|
+
": ",
|
|
368
|
+
firstPart
|
|
369
|
+
] });
|
|
370
|
+
$[7] = firstPart;
|
|
371
|
+
$[8] = linkToNode;
|
|
372
|
+
$[9] = t5;
|
|
373
|
+
} else t5 = $[9];
|
|
374
|
+
return t5;
|
|
375
|
+
}
|
|
376
|
+
const t5 = secondPart ? secondPart : null;
|
|
377
|
+
let t6;
|
|
378
|
+
if ($[10] !== firstPart || $[11] !== linkToNode || $[12] !== t5) {
|
|
379
|
+
t6 = /* @__PURE__ */ jsxs("div", { children: [
|
|
371
380
|
firstPart,
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
t5,
|
|
375
|
-
t6
|
|
381
|
+
linkToNode,
|
|
382
|
+
t5
|
|
376
383
|
] });
|
|
377
|
-
$[
|
|
378
|
-
$[
|
|
379
|
-
$[
|
|
380
|
-
$[
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
return t7;
|
|
384
|
+
$[10] = firstPart;
|
|
385
|
+
$[11] = linkToNode;
|
|
386
|
+
$[12] = t5;
|
|
387
|
+
$[13] = t6;
|
|
388
|
+
} else t6 = $[13];
|
|
389
|
+
return t6;
|
|
384
390
|
}
|
|
385
391
|
//#endregion
|
|
386
392
|
export { ErrorItemRenderer };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorItemRenderer.js","names":["Link","Typography","unstable_ErrorRegion","ErrorRegion","MAX_LIMIT_OVERRIDE","useTranslation","JSX","HierarchyLevelDetails","TreeRendererProps","ErrorInfo","TreeNode","ErrorItemRendererProps","Pick","treeNode","Omit","error","reloadTree","options","parentNodeId","scrollToNode","filterHierarchyLevel","hierarchyLevelDetails","ErrorItemRenderer","t0","$","_c","getHierarchyLevelDetails","translate","type","limit","resultSetSizeLimit","t1","id","setSizeLimit","onOverrideLimit","t2","t3","replace","toString","t4","t5","action","label","condition","t6","t7","t8","isFilterable","t9","t10","t11","t12","t13","hierarchyLevelDetails_0","_temp","_temp2","message","ErrorItemContainerProps","actions","MessageWithLinkProps","ErrorItemContainer","scrollToElement","filter","_temp3","map","_temp4","linkLabel","MessageWithLink","firstPart","splitMessage","split","trimEnd","trimStart","secondPart","Symbol","for","verticalAlign"],"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 { Link, Typography } from \"@mui/material\";\nimport { unstable_ErrorRegion as ErrorRegion } from \"@stratakit/structures\";\nimport { MAX_LIMIT_OVERRIDE } from \"../internal/Utils.js\";\nimport { useTranslation } from \"../LocalizationContext.js\";\n\nimport type { JSX } from \"react\";\nimport type { HierarchyLevelDetails, TreeRendererProps } from \"../Renderers.js\";\nimport type { ErrorInfo, TreeNode } from \"../TreeNode.js\";\n\n/** @alpha */\nexport interface ErrorItemRendererProps extends Pick<TreeRendererProps, \"getHierarchyLevelDetails\"> {\n /** The tree node associated with the error. Used for displaying the node label in error messages and for scrolling to the node. */\n treeNode: Omit<TreeNode, \"errors\">;\n /** The error to render. */\n error: ErrorInfo;\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: (treeNode: Omit<TreeNode, \"errors\">) => 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 `resultLimitExceeded` message with actions to increase limit or apply filtering\n * - `NoFilterMatches` - renders `noFilteredChildren` message with action to change filter\n * - `ChildrenLoad` - renders `failedToCreateHierarchy` message with action to retry loading\n * - `Unknown` - renders message set on error object.\n *\n * @alpha\n */\nexport function ErrorItemRenderer({\n treeNode,\n error,\n getHierarchyLevelDetails,\n filterHierarchyLevel,\n reloadTree,\n scrollToNode,\n}: ErrorItemRendererProps): JSX.Element {\n const translate = useTranslation();\n\n if (error.type === \"ResultSetTooLarge\") {\n const limit = error.resultSetSizeLimit;\n const onOverrideLimit = () => getHierarchyLevelDetails(treeNode.id)?.setSizeLimit(MAX_LIMIT_OVERRIDE);\n return (\n <ErrorItemContainer\n treeNode={treeNode}\n actions={[\n {\n action: () => {\n onOverrideLimit();\n },\n label: translate(\"increaseHierarchyLimit\").replace(\"{{limit}}\", MAX_LIMIT_OVERRIDE.toString()),\n condition: () => limit < MAX_LIMIT_OVERRIDE,\n },\n {\n action: () => {\n const hierarchyLevelDetails = getHierarchyLevelDetails(treeNode.id);\n hierarchyLevelDetails && filterHierarchyLevel?.(hierarchyLevelDetails);\n },\n label: translate(\"increaseHierarchyLimitWithFiltering\"),\n condition: () => !!filterHierarchyLevel && !!treeNode.isFilterable,\n },\n ]}\n message={translate(\"resultLimitExceeded\").replace(\"{{limit}}\", limit.toString())}\n scrollToElement={() => scrollToNode(treeNode)}\n />\n );\n }\n if (error.type === \"NoFilterMatches\") {\n return (\n <ErrorItemContainer\n treeNode={treeNode}\n actions={[\n {\n action: () => {\n const hierarchyLevelDetails = getHierarchyLevelDetails(treeNode.id);\n hierarchyLevelDetails && filterHierarchyLevel?.(hierarchyLevelDetails);\n },\n label: translate(\"noFilteredChildrenChangeFilter\"),\n condition: () => true,\n },\n ]}\n message={translate(\"noFilteredChildren\")}\n scrollToElement={() => scrollToNode(treeNode)}\n />\n );\n }\n if (error.type === \"ChildrenLoad\") {\n return (\n <ErrorItemContainer\n treeNode={treeNode}\n actions={[\n { action: () => reloadTree({ parentNodeId: treeNode.id }), label: translate(\"retry\"), condition: () => true },\n ]}\n message={translate(\"failedToCreateHierarchy\")}\n scrollToElement={() => scrollToNode(treeNode)}\n />\n );\n }\n return (\n <ErrorItemContainer treeNode={treeNode} message={error.message} scrollToElement={() => scrollToNode(treeNode)} />\n );\n}\n\ntype ErrorItemContainerProps = {\n treeNode: Omit<TreeNode, \"errors\">;\n message: string;\n actions?: { action: () => void; label: string; condition: () => boolean }[];\n} & Pick<MessageWithLinkProps, \"scrollToElement\">;\n\nfunction ErrorItemContainer({ treeNode, message, actions, scrollToElement }: ErrorItemContainerProps) {\n return (\n <ErrorRegion.Item\n message={<MessageWithLink linkLabel={treeNode.label} scrollToElement={scrollToElement} message={message} />}\n messageId={treeNode.id}\n actions={actions\n ?.filter(({ condition }) => condition())\n .map(({ label, action }) => (\n <Typography key={label} variant=\"caption\" render={<div />}>\n <Link render={<button type=\"button\" />} onClick={action}>\n {label}\n </Link>\n </Typography>\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 const firstPart = splitMessage[0].trimEnd();\n const secondPart = splitMessage[1]?.trimStart();\n return (\n <div>\n {firstPart}{\" \"}\n <Link\n render={<button type=\"button\" />}\n onClick={scrollToElement}\n variant=\"caption\"\n style={{ verticalAlign: \"baseline\" }}\n >\n {linkLabel}\n </Link>\n {secondPart ? \" \" : \"\"}\n {secondPart ? secondPart : null}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ErrorItemRenderer.js","names":["Link","Typography","unstable_ErrorRegion","ErrorRegion","MAX_LIMIT_OVERRIDE","useTranslation","JSX","HierarchyLevelDetails","TreeRendererProps","ErrorInfo","TreeNode","ErrorItemRendererProps","Pick","treeNode","Omit","error","reloadTree","options","parentNodeId","scrollToNode","filterHierarchyLevel","hierarchyLevelDetails","ErrorItemRenderer","t0","$","_c","getHierarchyLevelDetails","translate","type","limit","resultSetSizeLimit","t1","id","setSizeLimit","onOverrideLimit","t2","t3","replace","toString","t4","t5","action","label","condition","t6","t7","t8","isFilterable","t9","t10","t11","t12","t13","hierarchyLevelDetails_0","_temp","_temp2","message","ErrorItemContainerProps","actions","MessageWithLinkProps","ErrorItemContainer","scrollToElement","filter","_temp3","map","_temp4","linkLabel","MessageWithLink","split","splitMessage","firstPart","secondPart","length","undefined","Symbol","for","verticalAlign","linkToNode"],"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 { Link, Typography } from \"@mui/material\";\nimport { unstable_ErrorRegion as ErrorRegion } from \"@stratakit/structures\";\nimport { MAX_LIMIT_OVERRIDE } from \"../internal/Utils.js\";\nimport { useTranslation } from \"../LocalizationContext.js\";\n\nimport type { JSX } from \"react\";\nimport type { HierarchyLevelDetails, TreeRendererProps } from \"../Renderers.js\";\nimport type { ErrorInfo, TreeNode } from \"../TreeNode.js\";\n\n/** @alpha */\nexport interface ErrorItemRendererProps extends Pick<TreeRendererProps, \"getHierarchyLevelDetails\"> {\n /** The tree node associated with the error. Used for displaying the node label in error messages and for scrolling to the node. */\n treeNode: Omit<TreeNode, \"errors\">;\n /** The error to render. */\n error: ErrorInfo;\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: (treeNode: Omit<TreeNode, \"errors\">) => 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 `resultLimitExceeded` message with actions to increase limit or apply filtering\n * - `NoFilterMatches` - renders `noFilteredChildren` message with action to change filter\n * - `ChildrenLoad` - renders `failedToCreateHierarchy` message with action to retry loading\n * - `Unknown` - renders message set on error object.\n *\n * @alpha\n */\nexport function ErrorItemRenderer({\n treeNode,\n error,\n getHierarchyLevelDetails,\n filterHierarchyLevel,\n reloadTree,\n scrollToNode,\n}: ErrorItemRendererProps): JSX.Element {\n const translate = useTranslation();\n\n if (error.type === \"ResultSetTooLarge\") {\n const limit = error.resultSetSizeLimit;\n const onOverrideLimit = () => getHierarchyLevelDetails(treeNode.id)?.setSizeLimit(MAX_LIMIT_OVERRIDE);\n return (\n <ErrorItemContainer\n treeNode={treeNode}\n actions={[\n {\n action: () => {\n onOverrideLimit();\n },\n label: translate(\"increaseHierarchyLimit\").replace(\"{{limit}}\", MAX_LIMIT_OVERRIDE.toString()),\n condition: () => limit < MAX_LIMIT_OVERRIDE,\n },\n {\n action: () => {\n const hierarchyLevelDetails = getHierarchyLevelDetails(treeNode.id);\n hierarchyLevelDetails && filterHierarchyLevel?.(hierarchyLevelDetails);\n },\n label: translate(\"increaseHierarchyLimitWithFiltering\"),\n condition: () => !!filterHierarchyLevel && !!treeNode.isFilterable,\n },\n ]}\n message={translate(\"resultLimitExceeded\").replace(\"{{limit}}\", limit.toString())}\n scrollToElement={() => scrollToNode(treeNode)}\n />\n );\n }\n if (error.type === \"NoFilterMatches\") {\n return (\n <ErrorItemContainer\n treeNode={treeNode}\n actions={[\n {\n action: () => {\n const hierarchyLevelDetails = getHierarchyLevelDetails(treeNode.id);\n hierarchyLevelDetails && filterHierarchyLevel?.(hierarchyLevelDetails);\n },\n label: translate(\"noFilteredChildrenChangeFilter\"),\n condition: () => true,\n },\n ]}\n message={translate(\"noFilteredChildren\")}\n scrollToElement={() => scrollToNode(treeNode)}\n />\n );\n }\n if (error.type === \"ChildrenLoad\") {\n return (\n <ErrorItemContainer\n treeNode={treeNode}\n actions={[\n { action: () => reloadTree({ parentNodeId: treeNode.id }), label: translate(\"retry\"), condition: () => true },\n ]}\n message={translate(\"failedToCreateHierarchy\")}\n scrollToElement={() => scrollToNode(treeNode)}\n />\n );\n }\n return (\n <ErrorItemContainer treeNode={treeNode} message={error.message} scrollToElement={() => scrollToNode(treeNode)} />\n );\n}\n\ntype ErrorItemContainerProps = {\n treeNode: Omit<TreeNode, \"errors\">;\n message: string;\n actions?: { action: () => void; label: string; condition: () => boolean }[];\n} & Pick<MessageWithLinkProps, \"scrollToElement\">;\n\nfunction ErrorItemContainer({ treeNode, message, actions, scrollToElement }: ErrorItemContainerProps) {\n return (\n <ErrorRegion.Item\n message={<MessageWithLink linkLabel={treeNode.label} scrollToElement={scrollToElement} message={message} />}\n messageId={treeNode.id}\n actions={actions\n ?.filter(({ condition }) => condition())\n .map(({ label, action }) => (\n <Typography key={label} variant=\"caption\" render={<div />}>\n <Link render={<button type=\"button\" />} onClick={action}>\n {label}\n </Link>\n </Typography>\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 const firstPart = splitMessage[0];\n const secondPart = splitMessage.length > 1 ? splitMessage[1] : undefined;\n const linkToNode = (\n <Link\n render={<button type=\"button\" />}\n onClick={scrollToElement}\n variant=\"caption\"\n style={{ verticalAlign: \"baseline\" }}\n >\n {linkLabel}\n </Link>\n );\n\n if (message.length === firstPart.length) {\n return (\n <div>\n {linkToNode}\n {\": \"}\n {firstPart}\n </div>\n );\n }\n\n return (\n <div>\n {firstPart}\n {linkToNode}\n {secondPart ? secondPart : null}\n </div>\n );\n}\n"],"mappings":"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"}
|
package/lib/presentation-hierarchies-react/stratakit/{TreeNodeRenderer.css → LabelEditor.css}
RENAMED
|
@@ -4,15 +4,15 @@
|
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
|
|
6
6
|
.phr-node-label-editor {
|
|
7
|
-
padding: var(--stratakit-space-
|
|
7
|
+
padding: var(--stratakit-space-100);
|
|
8
8
|
width: 300px;
|
|
9
9
|
display: grid;
|
|
10
|
-
gap: var(--stratakit-space-
|
|
10
|
+
gap: var(--stratakit-space-100);
|
|
11
11
|
grid-template-rows: auto auto;
|
|
12
12
|
|
|
13
13
|
.phr-node-label-editor-input-row {
|
|
14
14
|
display: grid;
|
|
15
|
-
gap: var(--stratakit-space-
|
|
15
|
+
gap: var(--stratakit-space-100);
|
|
16
16
|
grid-template-columns: 1fr auto auto;
|
|
17
17
|
|
|
18
18
|
.with-error {
|