@itwin/presentation-hierarchies-react 2.0.0-alpha.54 → 2.0.0-alpha.56
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 +38 -0
- package/README.md +23 -61
- package/lib/presentation-hierarchies-react/Renderers.d.ts.map +1 -0
- package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/TreeNode.d.ts +2 -0
- package/lib/presentation-hierarchies-react/TreeNode.d.ts.map +1 -0
- package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/UseIModelTree.d.ts +1 -1
- package/lib/presentation-hierarchies-react/UseIModelTree.d.ts.map +1 -0
- package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/UseIModelTree.js +43 -48
- package/lib/presentation-hierarchies-react/UseIModelTree.js.map +1 -0
- package/lib/presentation-hierarchies-react/UseNodeHighlighting.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/UseNodeHighlighting.js.map +1 -0
- package/lib/presentation-hierarchies-react/UseSelectionHandler.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/UseSelectionHandler.js.map +1 -0
- package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/UseTree.d.ts +8 -3
- package/lib/presentation-hierarchies-react/UseTree.d.ts.map +1 -0
- package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/UseTree.js +21 -21
- package/lib/presentation-hierarchies-react/UseTree.js.map +1 -0
- package/lib/presentation-hierarchies-react/Utils.js.map +1 -0
- package/lib/presentation-hierarchies-react/internal/DisposePolyfill.js.map +1 -0
- package/lib/presentation-hierarchies-react/internal/LocalizedStrings.d.ts +9 -0
- package/lib/presentation-hierarchies-react/internal/LocalizedStrings.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/internal/LocalizedStrings.js +12 -0
- package/lib/presentation-hierarchies-react/internal/LocalizedStrings.js.map +1 -0
- package/lib/presentation-hierarchies-react/internal/TreeActions.js.map +1 -0
- package/lib/presentation-hierarchies-react/internal/TreeLoader.js.map +1 -0
- package/lib/presentation-hierarchies-react/internal/TreeModel.js.map +1 -0
- package/lib/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/internal/UseUnifiedSelection.js.map +1 -0
- package/lib/presentation-hierarchies-react/internal/Utils.js.map +1 -0
- package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/ErrorItemRenderer.d.ts +3 -3
- package/lib/presentation-hierarchies-react/stratakit/ErrorItemRenderer.d.ts.map +1 -0
- package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/ErrorItemRenderer.js +158 -128
- package/lib/presentation-hierarchies-react/stratakit/ErrorItemRenderer.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/FlatTreeNode.d.ts.map +1 -0
- package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/FlatTreeNode.js +7 -4
- package/lib/presentation-hierarchies-react/stratakit/FlatTreeNode.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/LocalizationContext.d.ts +24 -0
- package/lib/presentation-hierarchies-react/stratakit/LocalizationContext.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/LocalizationContext.js +41 -0
- package/lib/presentation-hierarchies-react/stratakit/LocalizationContext.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/RootErrorRenderer.d.ts.map +1 -0
- package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/RootErrorRenderer.js +64 -46
- package/lib/presentation-hierarchies-react/stratakit/RootErrorRenderer.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeAction.d.ts.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeAction.js.map +1 -0
- package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/TreeErrorRenderer.d.ts +3 -3
- package/lib/presentation-hierarchies-react/stratakit/TreeErrorRenderer.d.ts.map +1 -0
- package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/TreeErrorRenderer.js +19 -20
- package/lib/presentation-hierarchies-react/stratakit/TreeErrorRenderer.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.d.ts.map +1 -0
- package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/TreeNodeFilterAction.js +43 -30
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.d.ts.map +1 -0
- package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/TreeNodeRenameAction.js +37 -31
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.d.ts.map +1 -0
- package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/TreeNodeRenderer.js +227 -192
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.js.map +1 -0
- package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/TreeRenderer.d.ts +3 -6
- package/lib/presentation-hierarchies-react/stratakit/TreeRenderer.d.ts.map +1 -0
- package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/TreeRenderer.js +39 -45
- package/lib/presentation-hierarchies-react/stratakit/TreeRenderer.js.map +1 -0
- package/lib/{esm/presentation-hierarchies-react.d.ts → presentation-hierarchies-react.d.ts} +3 -2
- package/lib/{esm/presentation-hierarchies-react.js → presentation-hierarchies-react.js} +3 -2
- package/lib/public/locales/en/PresentationHierarchies_1.0.json +26 -0
- package/package.json +19 -15
- package/lib/esm/presentation-hierarchies-react/Renderers.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/TreeNode.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/UseIModelTree.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/UseIModelTree.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/UseNodeHighlighting.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/UseNodeHighlighting.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/UseSelectionHandler.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/UseSelectionHandler.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/UseTree.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/UseTree.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/Utils.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/internal/DisposePolyfill.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/internal/TreeActions.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/internal/TreeLoader.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/internal/TreeModel.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/internal/UseUnifiedSelection.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/internal/Utils.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/ErrorItemRenderer.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/ErrorItemRenderer.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/FlatTreeNode.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/FlatTreeNode.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/LocalizationContext.d.ts +0 -138
- package/lib/esm/presentation-hierarchies-react/stratakit/LocalizationContext.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/LocalizationContext.js +0 -67
- package/lib/esm/presentation-hierarchies-react/stratakit/LocalizationContext.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/RootErrorRenderer.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/RootErrorRenderer.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeAction.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeAction.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeErrorRenderer.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeErrorRenderer.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenderer.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeNodeRenderer.js.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeRenderer.d.ts.map +0 -1
- package/lib/esm/presentation-hierarchies-react/stratakit/TreeRenderer.js.map +0 -1
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/Renderers.d.ts +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/UseNodeHighlighting.d.ts +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/UseNodeHighlighting.js +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/UseSelectionHandler.d.ts +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/UseSelectionHandler.js +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/Utils.js +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/internal/DisposePolyfill.js +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/internal/TreeActions.js +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/internal/TreeLoader.js +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/internal/TreeModel.d.ts +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/internal/TreeModel.js +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/internal/UseUnifiedSelection.d.ts +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/internal/UseUnifiedSelection.js +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/internal/Utils.js +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/FlatTreeNode.d.ts +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/RootErrorRenderer.d.ts +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/TreeAction.d.ts +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/TreeAction.js +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/TreeNodeFilterAction.d.ts +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/TreeNodeRenameAction.d.ts +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/TreeNodeRenderer.css +0 -0
- /package/lib/{esm/presentation-hierarchies-react → presentation-hierarchies-react}/stratakit/TreeNodeRenderer.d.ts +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Utils.js","names":["useCallback","useInsertionEffect","useRef","LegacyRef","MutableRefObject","Ref","useLatest","value","$","_c","ref","t0","t1","current","useEvent","callback","latestCallback","args","useMergedRefs","refs","ReadonlyArray","T","instance","forEach"],"sources":["../../../src/presentation-hierarchies-react/Utils.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, useInsertionEffect, useRef } from \"react\";\n\nimport type { LegacyRef, MutableRefObject, Ref } from \"react\";\n\n/** @internal */\nexport function useLatest<T>(value: T) {\n const ref = useRef(value);\n\n useInsertionEffect(() => {\n ref.current = value;\n }, [value]);\n\n return ref;\n}\n\n/* c8 ignore start */\n/** @internal */\nexport function useEvent<TCallback extends (...args: any[]) => void>(callback: TCallback) {\n const latestCallback = useLatest(callback);\n\n return useCallback(\n (...args: Parameters<TCallback>) => {\n latestCallback.current(...args);\n },\n [latestCallback],\n );\n}\n/* c8 ignore end */\n\n/* c8 ignore start */\n/** @internal */\nexport function useMergedRefs<T>(...refs: ReadonlyArray<Ref<T> | LegacyRef<T> | undefined | null>) {\n return useCallback(\n (instance: T | null) => {\n refs.forEach((ref) => {\n if (typeof ref === \"function\") {\n ref(instance);\n } else if (ref) {\n (ref as MutableRefObject<T | null>).current = instance;\n }\n });\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [...refs],\n );\n}\n/* c8 ignore end */\n"],"mappings":";;;;;AAUA,SAAOM,UAAAC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CACL,MAAAC,MAAYR,OAAOK,MAAM;CAAC,IAAAI;CAAA,IAAAC;AAAA,KAAAJ,EAAA,OAAAD,OAAA;AAEPI,aAAA;AACjBD,OAAGG,UAAWN;;AACbK,OAAA,CAACL,MAAM;AAAAC,IAAA,KAAAD;AAAAC,IAAA,KAAAG;AAAAH,IAAA,KAAAI;QAAA;AAAAD,OAAAH,EAAA;AAAAI,OAAAJ,EAAA;;AAFVP,oBAAmBU,IAEhBC,GAAQ;AAAA,QAEJF;;;;AAKT,SAAOI,SAAAC,UAAA;CAAA,MAAAP,IAAAC,EAAA,EAAA;CACL,MAAAO,iBAAuBV,UAAUS,SAAS;CAAC,IAAAJ;AAAA,KAAAH,EAAA,OAAAQ,gBAAA;AAGzCL,QAAA,GAAAC,OAAA;GAAC,MAAAK,OAAAL;AACCI,kBAAcH,QAAQ,GAAII,KAAK;;AAChCT,IAAA,KAAAQ;AAAAR,IAAA,KAAAG;OAAAA,MAAAH,EAAA;AAAA,QAHIG;;;;;AAWT,SAAgBO,cAAiB,GAAGC,MAA+D;AACjG,QAAOnB,aACJsB,aAAuB;AACtBH,OAAKI,SAASb,QAAQ;AACpB,OAAI,OAAOA,QAAQ,WACjBA,KAAIY,SAAS;YACJZ,IACT,CAACA,IAAmCG,UAAUS;IAEhD;IAEJ,CAAC,GAAGH,KACN,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DisposePolyfill.js","names":["Symbol","dispose","asyncDispose"],"sources":["../../../../src/presentation-hierarchies-react/internal/DisposePolyfill.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\n/**\n * Polyfill for upcoming resource management feature: https://github.com/tc39/proposal-explicit-resource-management\n */\n(Symbol as any).dispose ??= Symbol(\"Symbol.dispose\");\n(Symbol as any).asyncDispose ??= Symbol(\"Symbol.asyncDispose\");\n"],"mappings":";;;;AAQA,AAACA,OAAeC,YAAYD,OAAO,iBAAiB;AACpD,AAACA,OAAeE,iBAAiBF,OAAO,sBAAsB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeActions.js","names":["enableMapSet","produce","buffer","debounceTime","EMPTY","groupBy","map","mergeMap","reduce","Subject","switchMap","takeUntil","tap","HierarchyNode","TreeLoader","TreeModel","createNodeId","sameNodes","Draft","Observable","GenericInstanceFilter","HierarchyProvider","ErrorInfo","SelectionChangeType","HierarchyLevelOptions","ITreeLoader","LoadedTreePart","LoadNodesOptions","TreeModelHierarchyNode","TreeModelRootNode","LoadDebouncedNodesOptions","loadOptions","onComplete","timeTracker","TimeTracker","initialRootNode","parentId","discardState","TreeActions","_loader","_nodeIdFactory","node","Pick","_currentModel","_reset","_nodeLoader","constructor","_onModelChanged","model","_onLoad","actionType","duration","_onHierarchyLimitExceeded","props","filter","limit","_onHierarchyLoadError","type","error","nodeIdFactory","seed","NoopTreeLoader","idToNode","Map","parentChildMap","rootNode","id","undefined","nodeData","createNodeLoader","subject","pipe","item","group","groupArr","returnIndex","length","forEach","member","index","Symbol","dispose","loadNodes","collectTreePartsUntil","next","newModel","parentNode","get","handleLoadedHierarchy","finish","complete","onLoadingComplete","subscribe","updateTreeModel","updater","loadedHierarchy","addHierarchyPart","setIsLoading","getLoadAction","size","loadSubTree","options","loadAction","parent","time","Promise","resolve","ignoreCache","getHierarchyLevelOptions","createHierarchyLevelOptions","getNonGroupedParentId","shouldLoadChildren","autoExpand","reloadSubTree","oldModel","currModel","expandedNodes","collectNodes","isExpanded","collapsedNodes","instanceFilter","hierarchyLevelSizeLimit","filteredNodeId","findIndex","expandedNode","collapsedNode","buildNode","addAttributes","getNode","reset","setHierarchyProvider","provider","Number","MAX_SAFE_INTEGER","nodeId","selectNodes","nodeIds","Array","changeType","expandNode","childrenAction","ReturnType","setHierarchyLimit","loadChildren","setInstanceFilter","reloadTree","parentNodeId","state","removeSubTree","untilNotifier","source","treeModel","loadedPart","addTreePartToModel","addNodesToModel","addErrorToModel","set","loadedNodes","oldNode","hierarchyLimit","isSelected","pred","currentChildren","flatMap","child","currNode","isGroupingNode","nonGroupingAncestor","modelNode","_start","_stopped","_onFinish","Date","now","elapsedTime"],"sources":["../../../../src/presentation-hierarchies-react/internal/TreeActions.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 \"./DisposePolyfill.js\";\n\nimport { enableMapSet, produce } from \"immer\";\nimport { buffer, debounceTime, EMPTY, groupBy, map, mergeMap, reduce, Subject, switchMap, takeUntil, tap } from \"rxjs\";\nimport { HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { TreeLoader } from \"./TreeLoader.js\";\nimport { TreeModel } from \"./TreeModel.js\";\nimport { createNodeId, sameNodes } from \"./Utils.js\";\n\nimport type { Draft } from \"immer\";\nimport type { Observable } from \"rxjs\";\nimport type { GenericInstanceFilter, HierarchyProvider } from \"@itwin/presentation-hierarchies\";\nimport type { ErrorInfo } from \"../TreeNode.js\";\nimport type { SelectionChangeType } from \"../UseSelectionHandler.js\";\nimport type { HierarchyLevelOptions, ITreeLoader, LoadedTreePart, LoadNodesOptions } from \"./TreeLoader.js\";\nimport type { TreeModelHierarchyNode, TreeModelRootNode } from \"./TreeModel.js\";\n\nenableMapSet();\n\ninterface LoadDebouncedNodesOptions {\n loadOptions: LoadNodesOptions;\n onComplete: () => void;\n timeTracker?: TimeTracker;\n initialRootNode?: TreeModelRootNode;\n parentId?: string;\n discardState?: boolean;\n}\n\n/** @internal */\nexport class TreeActions {\n private _loader: ITreeLoader;\n private _nodeIdFactory: (node: Pick<HierarchyNode, \"key\" | \"parentKeys\">) => string;\n private _currentModel: TreeModel;\n private _reset = new Subject<void>();\n private _nodeLoader: Subject<LoadDebouncedNodesOptions>;\n\n constructor(\n private _onModelChanged: (model: TreeModel) => void,\n private _onLoad: (actionType: \"initial-load\" | \"hierarchy-level-load\" | \"reload\", duration: number) => void,\n private _onHierarchyLimitExceeded: (props: { parentId?: string; filter?: GenericInstanceFilter; limit?: number | \"unbounded\" }) => void,\n private _onHierarchyLoadError: (props: { parentId?: string; type: \"timeout\" | \"unknown\"; error: unknown }) => void,\n nodeIdFactory?: (node: Pick<HierarchyNode, \"key\" | \"parentKeys\">) => string,\n seed?: TreeModel,\n ) {\n this._loader = new NoopTreeLoader();\n this._nodeIdFactory = nodeIdFactory ?? createNodeId;\n this._currentModel = seed ?? /* c8 ignore next */ {\n idToNode: new Map(),\n parentChildMap: new Map(),\n rootNode: { id: undefined, nodeData: undefined },\n };\n\n this._nodeLoader = this.createNodeLoader();\n }\n\n private createNodeLoader() {\n const subject = new Subject<LoadDebouncedNodesOptions>();\n subject\n .pipe(\n groupBy((item) => item.parentId),\n mergeMap((group) =>\n group.pipe(\n buffer(group.pipe(debounceTime(0))),\n map((groupArr) => {\n let returnIndex = groupArr.length - 1;\n\n groupArr.forEach((member, index) => {\n if (member.discardState) {\n returnIndex = index;\n }\n });\n\n groupArr.forEach((member, index) => {\n if (index === returnIndex) {\n return;\n }\n member.timeTracker?.[Symbol.dispose];\n member.onComplete();\n });\n return groupArr[returnIndex];\n }),\n switchMap((props) =>\n this._loader.loadNodes(props.loadOptions).pipe(\n collectTreePartsUntil(this._reset, props.initialRootNode),\n tap({\n next: (newModel: TreeModel) => {\n const parentNode = props.parentId ? newModel.idToNode.get(props.parentId) : newModel.rootNode;\n this.handleLoadedHierarchy(props.parentId, newModel);\n // only report load duration if children were loaded\n if (!(parentNode && parentNode.error)) {\n props.timeTracker?.finish();\n }\n },\n complete: () => {\n this.onLoadingComplete(props.parentId);\n props.timeTracker?.[Symbol.dispose]();\n props.onComplete();\n },\n }),\n ),\n ),\n ),\n ),\n )\n .subscribe();\n\n return subject;\n }\n\n private updateTreeModel(updater: (model: Draft<TreeModel>) => void) {\n const newModel = produce(this._currentModel, updater);\n if (this._currentModel === newModel) {\n return;\n }\n\n this._currentModel = newModel;\n this._onModelChanged(this._currentModel);\n }\n\n private handleLoadedHierarchy(parentId: string | undefined, loadedHierarchy: TreeModel) {\n this.updateTreeModel((model) => {\n TreeModel.addHierarchyPart(model, parentId, loadedHierarchy);\n });\n }\n\n private onLoadingComplete(parentId: string | undefined) {\n this.updateTreeModel((model) => {\n TreeModel.setIsLoading(model, parentId, false);\n });\n }\n\n private getLoadAction(parentId: string | undefined) {\n return this._currentModel.idToNode.size === 0 ? \"initial-load\" : parentId === undefined ? \"reload\" : \"hierarchy-level-load\";\n }\n\n private loadSubTree(options: LoadNodesOptions, initialRootNode?: TreeModelRootNode, discardState?: boolean) {\n const loadAction = this.getLoadAction(options.parent.id);\n const timeTracker = new TimeTracker((time) => this._onLoad(loadAction, time));\n\n return {\n complete: new Promise<void>((resolve) => {\n this._nodeLoader.next({ loadOptions: options, onComplete: resolve, timeTracker, parentId: options.parent.id, initialRootNode, discardState });\n }),\n };\n }\n\n private loadNodes(parentId: string, ignoreCache?: boolean) {\n const parentNode = this._currentModel.idToNode.get(parentId);\n /* c8 ignore next 3 */\n if (!parentNode) {\n return { complete: Promise.resolve() };\n }\n return this.loadSubTree({\n parent: parentNode,\n getHierarchyLevelOptions: (node) => createHierarchyLevelOptions(this._currentModel, getNonGroupedParentId(node, this._nodeIdFactory)),\n shouldLoadChildren: (node) => !!node.nodeData.autoExpand,\n ignoreCache,\n });\n }\n\n private reloadSubTree(parentId: string | undefined, oldModel: TreeModel, options?: { discardState?: boolean; ignoreCache?: boolean }) {\n const currModel = this._currentModel;\n const expandedNodes = !!options?.discardState ? [] : collectNodes(parentId, oldModel, (node) => node.isExpanded === true);\n const collapsedNodes = !!options?.discardState ? [] : collectNodes(parentId, oldModel, (node) => node.isExpanded === false);\n const getHierarchyLevelOptions = (node: TreeModelRootNode | TreeModelHierarchyNode) => {\n if (!!options?.discardState) {\n return { instanceFilter: undefined, hierarchyLevelSizeLimit: undefined };\n }\n const filteredNodeId = getNonGroupedParentId(node, this._nodeIdFactory);\n return createHierarchyLevelOptions(filteredNodeId === parentId ? currModel : oldModel, filteredNodeId);\n };\n const shouldLoadChildren = (node: TreeModelHierarchyNode) => {\n if (expandedNodes.findIndex((expandedNode) => sameNodes(expandedNode.nodeData, node.nodeData)) !== -1) {\n return true;\n }\n if (collapsedNodes.findIndex((collapsedNode) => sameNodes(collapsedNode.nodeData, node.nodeData)) !== -1) {\n return false;\n }\n return !!node.nodeData.autoExpand;\n };\n const buildNode = (node: TreeModelHierarchyNode) => (!!options?.discardState || node.id === parentId ? node : addAttributes(node, oldModel));\n\n const rootNode = parentId !== undefined ? this.getNode(parentId) : currModel.rootNode;\n /* c8 ignore next 3 */\n if (!rootNode) {\n return { complete: Promise.resolve() };\n }\n\n if (parentId === undefined) {\n // cancel all ongoing requests\n this._reset.next();\n }\n\n return this.loadSubTree(\n { parent: rootNode, getHierarchyLevelOptions, shouldLoadChildren, buildNode, ignoreCache: options?.ignoreCache },\n !!options?.discardState ? undefined : { ...currModel.rootNode },\n options?.discardState,\n );\n }\n\n public reset() {\n this._reset.next();\n }\n\n public setHierarchyProvider(provider?: HierarchyProvider) {\n this._loader = provider\n ? new TreeLoader(\n provider,\n this._onHierarchyLimitExceeded,\n ({ parentId, type, error }) => {\n if (type === \"timeout\") {\n const loadAction = this.getLoadAction(parentId);\n this._onLoad(loadAction, Number.MAX_SAFE_INTEGER);\n }\n this._onHierarchyLoadError({ parentId, type, error });\n },\n this._nodeIdFactory,\n )\n : /* c8 ignore next */ new NoopTreeLoader();\n }\n\n public getNode(nodeId: string | undefined): TreeModelHierarchyNode | TreeModelRootNode | undefined {\n return TreeModel.getNode(this._currentModel, nodeId);\n }\n\n public selectNodes(nodeIds: Array<string>, changeType: SelectionChangeType) {\n this.updateTreeModel((model) => {\n TreeModel.selectNodes(model, nodeIds, changeType);\n });\n }\n\n public expandNode(nodeId: string, isExpanded: boolean) {\n let childrenAction = \"none\" as ReturnType<typeof TreeModel.expandNode>;\n this.updateTreeModel((model) => {\n childrenAction = TreeModel.expandNode(model, nodeId, isExpanded);\n });\n\n if (childrenAction === \"none\") {\n return { complete: Promise.resolve() };\n }\n\n return this.loadNodes(nodeId, childrenAction === \"reloadChildren\");\n }\n\n public setHierarchyLimit(nodeId: string | undefined, limit?: number | \"unbounded\") {\n const oldModel = this._currentModel;\n let loadChildren = false as boolean;\n this.updateTreeModel((model) => {\n loadChildren = TreeModel.setHierarchyLimit(model, nodeId, limit);\n });\n\n if (!loadChildren) {\n return { complete: Promise.resolve() };\n }\n\n return this.reloadSubTree(nodeId, oldModel);\n }\n\n public setInstanceFilter(nodeId: string | undefined, filter?: GenericInstanceFilter) {\n const oldModel = this._currentModel;\n let loadChildren = false as boolean;\n this.updateTreeModel((model) => {\n loadChildren = TreeModel.setInstanceFilter(model, nodeId, filter);\n });\n\n if (!loadChildren) {\n return { complete: Promise.resolve() };\n }\n\n return this.reloadSubTree(nodeId, oldModel);\n }\n\n public reloadTree(options?: { parentNodeId?: string; state?: \"keep\" | \"discard\" | \"reset\" }) {\n const oldModel = this._currentModel;\n this.updateTreeModel((model) => {\n TreeModel.setIsLoading(model, options?.parentNodeId, true);\n if (options?.state === \"reset\") {\n TreeModel.removeSubTree(model, options.parentNodeId);\n }\n });\n\n const discardState = options?.state === \"discard\" || options?.state === \"reset\";\n const ignoreCache = options?.state === \"reset\";\n return this.reloadSubTree(options?.parentNodeId, oldModel, { discardState, ignoreCache });\n }\n}\n\nfunction collectTreePartsUntil(untilNotifier: Observable<void>, rootNode?: TreeModelRootNode) {\n return (source: Observable<LoadedTreePart>) =>\n source.pipe(\n reduce<LoadedTreePart, TreeModel>(\n (treeModel, loadedPart) => {\n addTreePartToModel(treeModel, loadedPart);\n return treeModel;\n },\n {\n idToNode: new Map(),\n parentChildMap: new Map(),\n rootNode: rootNode ?? { id: undefined, nodeData: undefined },\n },\n ),\n takeUntil(untilNotifier),\n );\n}\n\nfunction addTreePartToModel(treeModel: TreeModel, loadedPart: LoadedTreePart) {\n if (\"loadedNodes\" in loadedPart) {\n addNodesToModel(treeModel, loadedPart);\n } else {\n addErrorToModel(treeModel, loadedPart);\n }\n}\n\nfunction addErrorToModel(model: TreeModel, loadedPart: { parent: TreeModelHierarchyNode | TreeModelRootNode; error: ErrorInfo }) {\n if (loadedPart.parent.id === undefined) {\n model.rootNode.error = loadedPart.error;\n } else {\n model.idToNode.set(loadedPart.parent.id, { ...loadedPart.parent, error: loadedPart.error });\n }\n}\n\nfunction addNodesToModel(model: TreeModel, loadedPart: { parent: TreeModelHierarchyNode | TreeModelRootNode; loadedNodes: TreeModelHierarchyNode[] }) {\n model.parentChildMap.set(\n loadedPart.parent.id,\n loadedPart.loadedNodes.map((node) => node.id),\n );\n for (const node of loadedPart.loadedNodes) {\n model.idToNode.set(node.id, node);\n }\n const parentNode = loadedPart.parent.id ? model.idToNode.get(loadedPart.parent.id) : undefined;\n if (parentNode && loadedPart.loadedNodes.length !== 0) {\n parentNode.isExpanded = true;\n }\n}\n\nfunction addAttributes(node: TreeModelHierarchyNode, oldModel: TreeModel) {\n const oldNode = oldModel.idToNode.get(node.id);\n if (oldNode) {\n node.hierarchyLimit = oldNode.hierarchyLimit;\n node.instanceFilter = oldNode.instanceFilter;\n node.isSelected = oldNode.isSelected;\n }\n return node;\n}\n\nfunction collectNodes(parentId: string | undefined, model: TreeModel, pred: (node: TreeModelHierarchyNode) => boolean): TreeModelHierarchyNode[] {\n const currentChildren = model.parentChildMap.get(parentId);\n if (!currentChildren) {\n return [];\n }\n\n if (parentId === undefined) {\n return currentChildren.flatMap((child) => collectNodes(child, model, pred));\n }\n\n const currNode = model.idToNode.get(parentId);\n if (!currNode || !pred(currNode)) {\n return [];\n }\n\n return [currNode, ...currentChildren.flatMap((child) => collectNodes(child, model, pred))];\n}\n\nfunction getNonGroupedParentId(node: TreeModelHierarchyNode | TreeModelRootNode, nodeIdFactory: (node: Pick<HierarchyNode, \"key\" | \"parentKeys\">) => string) {\n if (!node.nodeData || !HierarchyNode.isGroupingNode(node.nodeData)) {\n return node.id;\n }\n\n if (!node.nodeData.nonGroupingAncestor) {\n return undefined;\n }\n\n return nodeIdFactory(node.nodeData.nonGroupingAncestor);\n}\n\nfunction createHierarchyLevelOptions(model: TreeModel, nodeId: string | undefined): HierarchyLevelOptions {\n if (nodeId === undefined) {\n return { instanceFilter: model.rootNode.instanceFilter, hierarchyLevelSizeLimit: model.rootNode.hierarchyLimit };\n }\n\n const modelNode = model.idToNode.get(nodeId);\n if (!modelNode) {\n return { instanceFilter: undefined, hierarchyLevelSizeLimit: undefined };\n }\n return { instanceFilter: modelNode.instanceFilter, hierarchyLevelSizeLimit: modelNode.hierarchyLimit };\n}\n\n/* c8 ignore start */\nclass NoopTreeLoader implements ITreeLoader {\n public loadNodes(): Observable<LoadedTreePart> {\n return EMPTY;\n }\n}\n/* c8 ignore end */\n\nclass TimeTracker {\n private _start: number;\n private _stopped: boolean = false;\n\n constructor(private _onFinish: (time: number) => void) {\n this._start = Date.now();\n }\n\n public [Symbol.dispose]() {\n this._stopped = true;\n }\n\n public finish() {\n /* c8 ignore next 3 */\n if (this._stopped) {\n return;\n }\n\n this._stopped = true;\n const elapsedTime = Date.now() - this._start;\n this._onFinish(elapsedTime);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeLoader.js","names":["catchError","EMPTY","expand","filter","from","map","mergeMap","of","toArray","createNodeId","Observable","GenericInstanceFilter","HierarchyNode","HierarchyProvider","RowsLimitExceededError","ErrorInfo","TreeModelHierarchyNode","TreeModelRootNode","LoadedTreePart","parent","loadedNodes","error","HierarchyLevelOptions","instanceFilter","hierarchyLevelSizeLimit","LoadNodesOptions","getHierarchyLevelOptions","node","shouldLoadChildren","buildNode","ignoreCache","ITreeLoader","loadNodes","options","TreeLoader","_treeNodeIdFactory","Pick","constructor","_hierarchyProvider","_onHierarchyLimitExceeded","props","parentId","limit","_onHierarchyLoadError","type","treeNodeIdFactory","loadChildren","Omit","infoNodeIdBase","id","treeModelNodesFactory","createTreeModelNodesFactory","getNodes","parentNode","nodeData","pipe","childNodes","length","const","err","hierarchyLoadErrorType","Error","isRowsLimitError","message","resultSetSizeLimit","isTimeoutError","loadedPart","modelNode","children","label","includes"],"sources":["../../../../src/presentation-hierarchies-react/internal/TreeLoader.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 { catchError, EMPTY, expand, filter, from, map, mergeMap, of, toArray } from \"rxjs\";\nimport { createNodeId } from \"./Utils.js\";\n\nimport type { Observable } from \"rxjs\";\nimport type { GenericInstanceFilter, HierarchyNode, HierarchyProvider, RowsLimitExceededError } from \"@itwin/presentation-hierarchies\";\nimport type { ErrorInfo } from \"../TreeNode.js\";\nimport type { TreeModelHierarchyNode, TreeModelRootNode } from \"./TreeModel.js\";\n\n/** @internal */\nexport type LoadedTreePart = {\n parent: TreeModelHierarchyNode | TreeModelRootNode;\n} & (\n | {\n loadedNodes: TreeModelHierarchyNode[];\n }\n | {\n error: ErrorInfo;\n }\n);\n\n/** @internal */\nexport interface HierarchyLevelOptions {\n instanceFilter?: GenericInstanceFilter;\n hierarchyLevelSizeLimit?: number | \"unbounded\";\n}\n\n/** @internal */\nexport interface LoadNodesOptions {\n parent: TreeModelHierarchyNode | TreeModelRootNode;\n getHierarchyLevelOptions: (node: TreeModelRootNode | TreeModelHierarchyNode) => HierarchyLevelOptions;\n shouldLoadChildren: (node: TreeModelHierarchyNode) => boolean;\n buildNode?: (node: TreeModelHierarchyNode) => TreeModelHierarchyNode;\n ignoreCache?: boolean;\n}\n\n/** @internal */\nexport interface ITreeLoader {\n loadNodes(options: LoadNodesOptions): Observable<LoadedTreePart>;\n}\n\n/** @internal */\nexport class TreeLoader implements ITreeLoader {\n private _treeNodeIdFactory: (node: Pick<HierarchyNode, \"key\" | \"parentKeys\">) => string;\n\n constructor(\n private _hierarchyProvider: HierarchyProvider,\n private _onHierarchyLimitExceeded: (props: { parentId?: string; filter?: GenericInstanceFilter; limit?: number | \"unbounded\" }) => void,\n private _onHierarchyLoadError: (props: { parentId?: string; type: \"timeout\" | \"unknown\"; error: unknown }) => void,\n treeNodeIdFactory?: (node: Pick<HierarchyNode, \"key\" | \"parentKeys\">) => string,\n ) {\n this._treeNodeIdFactory = treeNodeIdFactory ?? /* c8 ignore next */ createNodeId;\n }\n\n private loadChildren({ parent, getHierarchyLevelOptions, buildNode, ignoreCache }: Omit<LoadNodesOptions, \"shouldLoadChildren\">) {\n const { instanceFilter, hierarchyLevelSizeLimit } = getHierarchyLevelOptions(parent);\n const infoNodeIdBase = `${parent.id ?? \"<root>\"}`;\n const treeModelNodesFactory = createTreeModelNodesFactory({ buildNode, treeNodeIdFactory: this._treeNodeIdFactory });\n return from(\n this._hierarchyProvider.getNodes({\n parentNode: parent.nodeData,\n hierarchyLevelSizeLimit,\n instanceFilter,\n ignoreCache,\n }),\n ).pipe(\n toArray(),\n map((childNodes): LoadedTreePart => {\n return instanceFilter && childNodes.length === 0\n ? {\n parent,\n error: {\n id: `${infoNodeIdBase}-no-filter-matches`,\n type: \"NoFilterMatches\" as const,\n },\n }\n : {\n parent,\n loadedNodes: childNodes.map(treeModelNodesFactory),\n };\n }),\n catchError((err) => {\n let hierarchyLoadErrorType: \"unknown\" | \"timeout\" = \"unknown\";\n if (err instanceof Error) {\n if (isRowsLimitError(err)) {\n this._onHierarchyLimitExceeded({ parentId: parent.id, filter: instanceFilter, limit: err.limit });\n return of({\n parent,\n error: { id: `${infoNodeIdBase}-${err.message}`, type: \"ResultSetTooLarge\" as const, resultSetSizeLimit: err.limit },\n });\n }\n if (isTimeoutError(err)) {\n hierarchyLoadErrorType = \"timeout\";\n }\n }\n\n this._onHierarchyLoadError({ parentId: parent.id, type: hierarchyLoadErrorType, error: err });\n return of({\n parent,\n error: {\n id: `${infoNodeIdBase}-ChildrenLoad`,\n type: \"ChildrenLoad\" as const,\n message: \"Failed to create hierarchy level\",\n },\n });\n }),\n );\n }\n\n public loadNodes({ shouldLoadChildren, ...options }: LoadNodesOptions) {\n return this.loadChildren(options).pipe(\n expand((loadedPart) =>\n \"loadedNodes\" in loadedPart\n ? from(loadedPart.loadedNodes).pipe(\n filter((node) => shouldLoadChildren(node)),\n mergeMap((node) => this.loadChildren({ ...options, parent: node })),\n )\n : EMPTY,\n ),\n );\n }\n}\n\nfunction createTreeModelNodesFactory({\n buildNode,\n treeNodeIdFactory,\n}: {\n buildNode?: (node: TreeModelHierarchyNode) => TreeModelHierarchyNode;\n treeNodeIdFactory: (node: Pick<HierarchyNode, \"key\" | \"parentKeys\">) => string;\n}): (node: HierarchyNode) => TreeModelHierarchyNode {\n return (node: HierarchyNode) => {\n const modelNode: TreeModelHierarchyNode = {\n id: treeNodeIdFactory(node),\n children: node.children,\n label: node.label,\n nodeData: node,\n };\n return buildNode ? buildNode(modelNode) : modelNode;\n };\n}\n\nfunction isRowsLimitError(error: Error): error is RowsLimitExceededError {\n return \"limit\" in error && error.message.includes(\"Query rows limit of\");\n}\n\nfunction isTimeoutError(error: Error) {\n return error.message.includes(\"query too long to execute or server is too busy\");\n}\n"],"mappings":";;;;;AA8CA,IAAakC,aAAb,MAA+C;CAC7C,AAAQC;CAERE,YACE,AAAQC,oBACR,AAAQC,2BACR,AAAQI,uBACRE,mBACA;EAJQP;EACAC;EACAI;AAGR,OAAKR,qBAAqBU,qBAA0CpC;;CAGtE,AAAQqC,aAAa,EAAE3B,QAAQO,0BAA0BG,WAAWC,eAA6D;EAC/H,MAAM,EAAEP,gBAAgBC,4BAA4BE,yBAAyBP,OAAO;EACpF,MAAM6B,iBAAiB,GAAG7B,OAAO8B,MAAM;EACvC,MAAMC,wBAAwBC,4BAA4B;GAAEtB;GAAWgB,mBAAmB,KAAKV;GAAoB,CAAC;AACpH,SAAO/B,KACL,KAAKkC,mBAAmBc,SAAS;GAC/BC,YAAYlC,OAAOmC;GACnB9B;GACAD;GACAO;GACD,CACH,CAAC,CAACyB,KACA/C,SAAS,EACTH,KAAKmD,eAA+B;AAClC,UAAOjC,kBAAkBiC,WAAWC,WAAW,IAC3C;IACEtC;IACAE,OAAO;KACL4B,IAAI,GAAGD,eAAc;KACrBJ,MAAM;KACR;IACD,GACD;IACEzB;IACAC,aAAaoC,WAAWnD,IAAI6C,sBAAqB;IAClD;IACL,EACFlD,YAAY2D,QAAQ;GAClB,IAAIC,yBAAgD;AACpD,OAAID,eAAeE,OAAO;AACxB,QAAIC,iBAAiBH,IAAI,EAAE;AACzB,UAAKpB,0BAA0B;MAAEE,UAAUtB,OAAO8B;MAAI9C,QAAQoB;MAAgBmB,OAAOiB,IAAIjB;MAAO,CAAC;AACjG,YAAOnC,GAAG;MACRY;MACAE,OAAO;OAAE4B,IAAI,GAAGD,eAAc,GAAIW,IAAII;OAAWnB,MAAM;OAA8BoB,oBAAoBL,IAAIjB;OAAM;MACpH,CAAC;;AAEJ,QAAIuB,eAAeN,IAAI,CACrBC,0BAAyB;;AAI7B,QAAKjB,sBAAsB;IAAEF,UAAUtB,OAAO8B;IAAIL,MAAMgB;IAAwBvC,OAAOsC;IAAK,CAAC;AAC7F,UAAOpD,GAAG;IACRY;IACAE,OAAO;KACL4B,IAAI,GAAGD,eAAc;KACrBJ,MAAM;KACNmB,SAAS;KACX;IACD,CAAC;IAEN,CAAC;;CAGH,AAAO/B,UAAU,EAAEJ,oBAAoB,GAAGK,WAA6B;AACrE,SAAO,KAAKa,aAAab,QAAQ,CAACsB,KAChCrD,QAAQgE,eACN,iBAAiBA,aACb9D,KAAK8D,WAAW9C,YAAY,CAACmC,KAC3BpD,QAAQwB,SAASC,mBAAmBD,KAAK,CAAC,EAC1CrB,UAAUqB,SAAS,KAAKmB,aAAa;GAAE,GAAGb;GAASd,QAAQQ;GAAM,CAAC,CACpE,CAAC,GACD1B,MAER,CAAC;;;AAIL,SAASkD,4BAA4B,EACnCtB,WACAgB,qBAIkD;AAClD,SAAQlB,SAAwB;EAC9B,MAAMwC,YAAoC;GACxClB,IAAIJ,kBAAkBlB,KAAK;GAC3ByC,UAAUzC,KAAKyC;GACfC,OAAO1C,KAAK0C;GACZf,UAAU3B;GACX;AACD,SAAOE,YAAYA,UAAUsC,UAAU,GAAGA;;;AAI9C,SAASL,iBAAiBzC,OAA+C;AACvE,QAAO,WAAWA,SAASA,MAAM0C,QAAQO,SAAS,sBAAsB;;AAG1E,SAASL,eAAe5C,OAAc;AACpC,QAAOA,MAAM0C,QAAQO,SAAS,kDAAkD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeModel.js","names":["GenericInstanceFilter","HierarchyNode","ErrorInfo","SelectionChangeType","TreeModelRootNode","id","nodeData","hierarchyLimit","instanceFilter","isLoading","error","TreeModelHierarchyNode","label","children","isExpanded","isSelected","TreeModel","parentChildMap","Map","idToNode","rootNode","expandNode","model","nodeId","node","get","type","removeSubTree","addHierarchyPart","rootId","hierarchyPart","parentId","set","parentNode","undefined","clearNodeError","currentChildren","delete","childId","childNode","setHierarchyLimit","limit","updateForReload","setInstanceFilter","filter","selectNodes","nodeIds","Array","changeType","find","modelNode","isNodeSelected","currentNode","getNode","setIsLoading","update"],"sources":["../../../../src/presentation-hierarchies-react/internal/TreeModel.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 type { GenericInstanceFilter, HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport type { ErrorInfo } from \"../TreeNode.js\";\nimport type { SelectionChangeType } from \"../UseSelectionHandler.js\";\n\n/** @internal */\nexport interface TreeModelRootNode {\n id: undefined;\n nodeData: undefined;\n hierarchyLimit?: number | \"unbounded\";\n instanceFilter?: GenericInstanceFilter;\n isLoading?: boolean;\n error?: ErrorInfo;\n}\n\n/** @internal */\nexport interface TreeModelHierarchyNode {\n id: string;\n nodeData: HierarchyNode;\n label: string;\n children: boolean;\n isLoading?: boolean;\n isExpanded?: boolean;\n isSelected?: boolean;\n hierarchyLimit?: number | \"unbounded\";\n instanceFilter?: GenericInstanceFilter;\n error?: ErrorInfo;\n}\n\n/** @internal */\nexport interface TreeModel {\n parentChildMap: Map<string | undefined, string[]>;\n idToNode: Map<string, TreeModelHierarchyNode>;\n rootNode: TreeModelRootNode;\n}\n\n/** @internal */\nexport namespace TreeModel {\n export function expandNode(model: TreeModel, nodeId: string, isExpanded: boolean): \"none\" | \"loadChildren\" | \"reloadChildren\" {\n const node = model.idToNode.get(nodeId);\n if (!node) {\n return \"none\";\n }\n\n node.isExpanded = isExpanded;\n if (!isExpanded) {\n return \"none\";\n }\n\n if (node.error?.type === \"ChildrenLoad\") {\n node.isLoading = true;\n // remove subtree if there `ChildrenLoad` error info in order to attempt reloading children\n TreeModel.removeSubTree(model, nodeId);\n return \"reloadChildren\";\n }\n\n if (!node.children) {\n return \"none\";\n }\n\n const children = model.parentChildMap.get(node.id);\n if (!children) {\n node.isLoading = true;\n return \"loadChildren\";\n }\n\n return \"none\";\n }\n\n /** @internal */\n export function addHierarchyPart(model: TreeModel, rootId: string | undefined, hierarchyPart: TreeModel): void {\n removeSubTree(model, rootId);\n model.rootNode.error = hierarchyPart.rootNode.error;\n\n for (const [parentId, children] of hierarchyPart.parentChildMap) {\n model.parentChildMap.set(parentId, children);\n }\n\n for (const [nodeId, node] of hierarchyPart.idToNode) {\n model.idToNode.set(nodeId, node);\n }\n\n const parentNode = rootId !== undefined ? model.idToNode.get(rootId) : model.rootNode;\n /* c8 ignore next 3*/\n if (!parentNode) {\n return;\n }\n parentNode.isLoading = false;\n }\n\n export function removeSubTree(model: TreeModel, parentId: string | undefined): void {\n clearNodeError(model, parentId);\n const currentChildren = model.parentChildMap.get(parentId);\n if (!currentChildren) {\n return;\n }\n model.parentChildMap.delete(parentId);\n\n for (const childId of currentChildren) {\n const childNode = model.idToNode.get(childId);\n if (childNode) {\n removeSubTree(model, childNode.id);\n }\n model.idToNode.delete(childId);\n }\n }\n\n export function setHierarchyLimit(model: TreeModel, nodeId: string | undefined, limit?: number | \"unbounded\"): boolean {\n return updateForReload(model, nodeId, (node) => {\n node.hierarchyLimit = limit;\n });\n }\n\n export function setInstanceFilter(model: TreeModel, nodeId: string | undefined, filter?: GenericInstanceFilter): boolean {\n return updateForReload(model, nodeId, (node) => {\n if (filter && node.id !== undefined) {\n node.isExpanded = true;\n }\n node.instanceFilter = filter;\n });\n }\n\n export function selectNodes(model: TreeModel, nodeIds: Array<string>, changeType: SelectionChangeType) {\n if (changeType === \"replace\") {\n for (const [nodeId, node] of model.idToNode) {\n node.isSelected = !!nodeIds.find((id) => id === nodeId);\n }\n return;\n }\n for (const nodeId of nodeIds) {\n const modelNode = model.idToNode.get(nodeId);\n if (!modelNode) {\n return;\n }\n modelNode.isSelected = changeType === \"add\";\n }\n }\n\n export function isNodeSelected(model: TreeModel, nodeId: string): boolean {\n const currentNode = model.idToNode.get(nodeId);\n return !!currentNode && !!currentNode.isSelected;\n }\n\n export function getNode(model: TreeModel, nodeId: string | undefined): TreeModelHierarchyNode | TreeModelRootNode | undefined {\n if (!nodeId) {\n return model.rootNode;\n }\n return model.idToNode.get(nodeId);\n }\n\n export function setIsLoading(model: TreeModel, nodeId: string | undefined, isLoading: boolean) {\n if (nodeId === undefined) {\n model.rootNode.isLoading = isLoading;\n return;\n }\n const modelNode = model.idToNode.get(nodeId);\n /* c8 ignore next 3*/\n if (!modelNode) {\n return;\n }\n modelNode.isLoading = isLoading;\n }\n}\n\nfunction updateForReload(model: TreeModel, nodeId: string | undefined, update: (node: TreeModelHierarchyNode | TreeModelRootNode) => void) {\n TreeModel.removeSubTree(model, nodeId);\n if (nodeId === undefined) {\n update(model.rootNode);\n model.rootNode.isLoading = true;\n return true;\n }\n\n const modelNode = model.idToNode.get(nodeId);\n if (!modelNode) {\n return false;\n }\n\n update(modelNode);\n if (modelNode.isExpanded) {\n modelNode.isLoading = true;\n return true;\n }\n return false;\n}\n\nfunction clearNodeError(model: TreeModel, parentId: string | undefined) {\n if (!parentId) {\n return (model.rootNode.error = undefined);\n }\n const node = model.idToNode.get(parentId);\n if (!node) {\n return;\n }\n node.error = undefined;\n}\n"],"mappings":";;;CA0CS,SAASqB,WAAWC,OAAkBC,QAAgBT,YAAiE;EAC5H,MAAMU,OAAOF,MAAMH,SAASM,IAAIF,OAAO;AACvC,MAAI,CAACC,KACH,QAAO;AAGTA,OAAKV,aAAaA;AAClB,MAAI,CAACA,WACH,QAAO;AAGT,MAAIU,KAAKd,OAAOgB,SAAS,gBAAgB;AACvCF,QAAKf,YAAY;AAEjBO,aAAUW,cAAcL,OAAOC,OAAO;AACtC,UAAO;;AAGT,MAAI,CAACC,KAAKX,SACR,QAAO;AAIT,MAAI,CADaS,MAAML,eAAeQ,IAAID,KAAKnB,GAAG,EACnC;AACbmB,QAAKf,YAAY;AACjB,UAAO;;AAGT,SAAO;;;CAIF,SAASmB,iBAAiBN,OAAkBO,QAA4BC,eAAgC;AAC7GH,gBAAcL,OAAOO,OAAO;AAC5BP,QAAMF,SAASV,QAAQoB,cAAcV,SAASV;AAE9C,OAAK,MAAM,CAACqB,UAAUlB,aAAaiB,cAAcb,eAC/CK,OAAML,eAAee,IAAID,UAAUlB,SAAS;AAG9C,OAAK,MAAM,CAACU,QAAQC,SAASM,cAAcX,SACzCG,OAAMH,SAASa,IAAIT,QAAQC,KAAK;EAGlC,MAAMS,aAAaJ,WAAWK,SAAYZ,MAAMH,SAASM,IAAII,OAAO,GAAGP,MAAMF;;AAE7E,MAAI,CAACa,WACH;AAEFA,aAAWxB,YAAY;;;CAGlB,SAASkB,cAAcL,OAAkBS,UAAoC;AAClFI,iBAAeb,OAAOS,SAAS;EAC/B,MAAMK,kBAAkBd,MAAML,eAAeQ,IAAIM,SAAS;AAC1D,MAAI,CAACK,gBACH;AAEFd,QAAML,eAAeoB,OAAON,SAAS;AAErC,OAAK,MAAMO,WAAWF,iBAAiB;GACrC,MAAMG,YAAYjB,MAAMH,SAASM,IAAIa,QAAQ;AAC7C,OAAIC,UACFZ,eAAcL,OAAOiB,UAAUlC,GAAG;AAEpCiB,SAAMH,SAASkB,OAAOC,QAAQ;;;;CAI3B,SAASE,kBAAkBlB,OAAkBC,QAA4BkB,OAAuC;AACrH,SAAOC,gBAAgBpB,OAAOC,SAASC,SAAS;AAC9CA,QAAKjB,iBAAiBkC;IACtB;;;CAGG,SAASE,kBAAkBrB,OAAkBC,QAA4BqB,QAAyC;AACvH,SAAOF,gBAAgBpB,OAAOC,SAASC,SAAS;AAC9C,OAAIoB,UAAUpB,KAAKnB,OAAO6B,OACxBV,MAAKV,aAAa;AAEpBU,QAAKhB,iBAAiBoC;IACtB;;;CAGG,SAASC,YAAYvB,OAAkBwB,SAAwBE,YAAiC;AACrG,MAAIA,eAAe,WAAW;AAC5B,QAAK,MAAM,CAACzB,QAAQC,SAASF,MAAMH,SACjCK,MAAKT,aAAa,CAAC,CAAC+B,QAAQG,MAAM5C,OAAOA,OAAOkB,OAAO;AAEzD;;AAEF,OAAK,MAAMA,UAAUuB,SAAS;GAC5B,MAAMI,YAAY5B,MAAMH,SAASM,IAAIF,OAAO;AAC5C,OAAI,CAAC2B,UACH;AAEFA,aAAUnC,aAAaiC,eAAe;;;;CAInC,SAASG,eAAe7B,OAAkBC,QAAyB;EACxE,MAAM6B,cAAc9B,MAAMH,SAASM,IAAIF,OAAO;AAC9C,SAAO,CAAC,CAAC6B,eAAe,CAAC,CAACA,YAAYrC;;;CAGjC,SAASsC,QAAQ/B,OAAkBC,QAAoF;AAC5H,MAAI,CAACA,OACH,QAAOD,MAAMF;AAEf,SAAOE,MAAMH,SAASM,IAAIF,OAAO;;;CAG5B,SAAS+B,aAAahC,OAAkBC,QAA4Bd,WAAoB;AAC7F,MAAIc,WAAWW,QAAW;AACxBZ,SAAMF,SAASX,YAAYA;AAC3B;;EAEF,MAAMyC,YAAY5B,MAAMH,SAASM,IAAIF,OAAO;;AAE5C,MAAI,CAAC2B,UACH;AAEFA,YAAUzC,YAAYA;;;;AAI1B,SAASiC,gBAAgBpB,OAAkBC,QAA4BgC,QAAoE;AACzIvC,WAAUW,cAAcL,OAAOC,OAAO;AACtC,KAAIA,WAAWW,QAAW;AACxBqB,SAAOjC,MAAMF,SAAS;AACtBE,QAAMF,SAASX,YAAY;AAC3B,SAAO;;CAGT,MAAMyC,YAAY5B,MAAMH,SAASM,IAAIF,OAAO;AAC5C,KAAI,CAAC2B,UACH,QAAO;AAGTK,QAAOL,UAAU;AACjB,KAAIA,UAAUpC,YAAY;AACxBoC,YAAUzC,YAAY;AACtB,SAAO;;AAET,QAAO;;AAGT,SAAS0B,eAAeb,OAAkBS,UAA8B;AACtE,KAAI,CAACA,UAAU;AACLT,QAAMF,SAASV,QAAQwB;AAA/B;;CAEF,MAAMV,OAAOF,MAAMH,SAASM,IAAIM,SAAS;AACzC,KAAI,CAACP,KACH;AAEFA,MAAKd,QAAQwB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UseUnifiedSelection.d.ts","names":[],"sources":["../../../../src/presentation-hierarchies-react/internal/UseUnifiedSelection.ts"],"mappings":";;;;;;;UAuBiB,4BAAA;EAoByG;;;EAhBxH,UAAA;EAAA;;;;;;;;;;;;;;EAgBA,8BAAA,IAAkC,IAAA,EAAM,wBAAA;IAA6B,GAAA,EAAK,cAAA;EAAA,GAAkB,eAAA,aAA4B,UAAA;;;;EAKxH,gBAAA,EAAkB,gBAAA;AAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UseUnifiedSelection.js","names":["useEffect","useState","assert","HierarchyNode","Selectables","GenericNodeKey","InstancesNodeKey","NonGroupingHierarchyNode","InstanceKey","Selectable","SelectionStorage","SelectionChangeType","TreeModelHierarchyNode","TreeModelRootNode","TreeSelectionOptions","isNodeSelected","nodeId","selectNodes","nodeIds","Array","changeType","UseUnifiedTreeSelectionProps","sourceName","createSelectableForGenericNode","node","key","treeModelNodeId","selectionStorage","useUnifiedTreeSelection","t0","$","_c","getTreeModelNode","t1","undefined","defaultCreateSelectableForGenericNode","options","setOptions","_temp3","t2","t3","createOptions","selectionChangeEvent","addListener","args","level","_temp","_temp2","NonNullable","identifier","data","loadInstanceKeys","source","storage","getNode","id","imodelKey","nodeSelectables","groupNodeSelectablesByIModelKey","storageSelectables","getSelection","hasAny","imodelSelectables","Map","selectablesList","get","set","forEach","selectable","push","selectables","actionProps","addToSelection","removeFromSelection","replaceSelection","modelNode","hierarchyNode","nodeData","isInstancesNode","groupIModelInstanceKeys","instanceKeys","isGroupingNode","groupingNodeSelectables","groupedInstanceKeys","isGeneric","reduce"],"sources":["../../../../src/presentation-hierarchies-react/internal/UseUnifiedSelection.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 { useEffect, useState } from \"react\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { Selectables } from \"@itwin/unified-selection\";\n\nimport type { GenericNodeKey, InstancesNodeKey, NonGroupingHierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport type { InstanceKey } from \"@itwin/presentation-shared\";\nimport type { Selectable, SelectionStorage } from \"@itwin/unified-selection\";\nimport type { SelectionChangeType } from \"../UseSelectionHandler.js\";\nimport type { TreeModelHierarchyNode, TreeModelRootNode } from \"./TreeModel.js\";\n\n/** @internal */\nexport interface TreeSelectionOptions {\n isNodeSelected: (nodeId: string) => boolean;\n selectNodes: (nodeIds: Array<string>, changeType: SelectionChangeType) => void;\n}\n\n/** @public */\nexport interface UseUnifiedTreeSelectionProps {\n /**\n * Identifier to distinguish this source of changes to the unified selection from another ones in the application.\n */\n sourceName: string;\n\n /**\n * An optional function that allows customizing the `Selectable` object that gets created for generic hierarchy nodes. When\n * not supplied, the `Selectable` is created using the following signature:\n * ```ts\n * {\n * identifier: treeModelNodeId,\n * data: node,\n * async *loadInstanceKeys() {},\n * }\n * ```\n *\n * @param node Hierarchy node to create a selectable for.\n * @param treeModelNodeId ID of the hierarchy node in the internal tree model. This ID uniquely identifies the node in the whole hierarchy, as opposed to `GenericNodeKey.id` contained within the `node`, which may not be unique.\n */\n createSelectableForGenericNode?: (node: NonGroupingHierarchyNode & { key: GenericNodeKey }, treeModelNodeId: string) => Selectable;\n\n /**\n * Unified selection storage to use for listening, getting and changing active selection.\n */\n selectionStorage: SelectionStorage;\n}\n\n/** @internal */\nexport function useUnifiedTreeSelection({\n sourceName,\n selectionStorage,\n getTreeModelNode,\n createSelectableForGenericNode = defaultCreateSelectableForGenericNode,\n}: UseUnifiedTreeSelectionProps & { getTreeModelNode: (nodeId: string) => TreeModelHierarchyNode | TreeModelRootNode | undefined }): TreeSelectionOptions {\n const [options, setOptions] = useState<TreeSelectionOptions>(() => ({\n isNodeSelected: /* c8 ignore next */ () => false,\n selectNodes: /* c8 ignore next */ () => {},\n }));\n\n useEffect(() => {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setOptions(createOptions(sourceName, selectionStorage, createSelectableForGenericNode, getTreeModelNode));\n return selectionStorage.selectionChangeEvent.addListener((args) => {\n if (args.level > 0) {\n return;\n }\n setOptions(createOptions(sourceName, selectionStorage, createSelectableForGenericNode, getTreeModelNode));\n });\n }, [selectionStorage, createSelectableForGenericNode, getTreeModelNode, sourceName]);\n\n return options;\n}\n\nconst defaultCreateSelectableForGenericNode: NonNullable<UseUnifiedTreeSelectionProps[\"createSelectableForGenericNode\"]> = (\n node,\n treeModelNodeId,\n): Selectable => ({\n identifier: treeModelNodeId,\n data: node,\n async *loadInstanceKeys() {},\n});\n\nfunction createOptions(\n source: string,\n storage: SelectionStorage,\n createSelectableForGenericNode: NonNullable<UseUnifiedTreeSelectionProps[\"createSelectableForGenericNode\"]>,\n getNode: (nodeId: string) => TreeModelHierarchyNode | TreeModelRootNode | undefined,\n): TreeSelectionOptions {\n return {\n isNodeSelected: (nodeId: string) => {\n const node = getNode(nodeId);\n if (!node || node.id === undefined) {\n return false;\n }\n for (const [imodelKey, nodeSelectables] of groupNodeSelectablesByIModelKey(node, createSelectableForGenericNode)) {\n const storageSelectables = storage.getSelection({ imodelKey, level: 0 });\n if (Selectables.hasAny(storageSelectables, nodeSelectables)) {\n return true;\n }\n }\n return false;\n },\n\n selectNodes: (nodeIds: Array<string>, changeType: SelectionChangeType) => {\n const imodelSelectables = new Map<string, Selectable[]>();\n for (const nodeId of nodeIds) {\n const node = getNode(nodeId);\n if (!node || node.id === undefined) {\n return;\n }\n for (const [imodelKey, nodeSelectables] of groupNodeSelectablesByIModelKey(node, createSelectableForGenericNode)) {\n let selectablesList = imodelSelectables.get(imodelKey);\n if (!selectablesList) {\n selectablesList = [];\n imodelSelectables.set(imodelKey, selectablesList);\n }\n nodeSelectables.forEach((selectable) => selectablesList.push(selectable));\n }\n }\n imodelSelectables.forEach((selectables, imodelKey) => {\n const actionProps = { imodelKey, source, selectables, level: 0 };\n switch (changeType) {\n case \"add\":\n storage.addToSelection(actionProps);\n return;\n case \"remove\":\n storage.removeFromSelection(actionProps);\n return;\n case \"replace\":\n storage.replaceSelection(actionProps);\n return;\n }\n });\n },\n };\n}\n\nfunction groupNodeSelectablesByIModelKey(\n modelNode: TreeModelHierarchyNode,\n createSelectableForGenericNode: NonNullable<UseUnifiedTreeSelectionProps[\"createSelectableForGenericNode\"]>,\n): Map<string, Selectable[]> {\n const hierarchyNode = modelNode.nodeData;\n if (HierarchyNode.isInstancesNode(hierarchyNode)) {\n return groupIModelInstanceKeys(hierarchyNode.key.instanceKeys);\n }\n if (HierarchyNode.isGroupingNode(hierarchyNode)) {\n const groupingNodeSelectables = new Map<string, Selectable[]>();\n groupIModelInstanceKeys(hierarchyNode.groupedInstanceKeys).forEach((instanceKeys, imodelKey) => {\n groupingNodeSelectables.set(imodelKey, [\n {\n identifier: modelNode.id,\n data: hierarchyNode,\n async *loadInstanceKeys() {\n for (const key of instanceKeys) {\n yield key;\n }\n },\n },\n ]);\n });\n return groupingNodeSelectables;\n }\n assert(HierarchyNode.isGeneric(hierarchyNode));\n // note: generic nodes aren't associated with an imodel\n return new Map([[\"\", [createSelectableForGenericNode(hierarchyNode, modelNode.id)]]]);\n}\n\nfunction groupIModelInstanceKeys(instanceKeys: InstancesNodeKey[\"instanceKeys\"]) {\n return instanceKeys.reduce((imodelSelectables, key) => {\n const imodelKey = key.imodelKey ?? \"\";\n let selectablesList = imodelSelectables.get(imodelKey);\n if (!selectablesList) {\n selectablesList = [];\n imodelSelectables.set(imodelKey, selectablesList);\n }\n selectablesList.push(key);\n return imodelSelectables;\n }, new Map<string, InstanceKey[]>());\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Utils.js","names":["HierarchyNodeKey","HierarchyNode","createNodeId","node","Pick","parentKeys","map","serializeNodeKey","key","join","convertObjectValuesToString","obj","Object","entries","value","String","sameNodes","lhs","rhs","compare","length","i","MAX_LIMIT_OVERRIDE","safeDispose","disposable","Symbol","dispose"],"sources":["../../../../src/presentation-hierarchies-react/internal/Utils.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 \"./DisposePolyfill.js\";\n\nimport { HierarchyNodeKey } from \"@itwin/presentation-hierarchies\";\n\nimport type { HierarchyNode } from \"@itwin/presentation-hierarchies\";\n\n/** @internal */\nexport function createNodeId(node: Pick<HierarchyNode, \"key\" | \"parentKeys\">) {\n return [...node.parentKeys.map(serializeNodeKey), serializeNodeKey(node.key)].join(\";\");\n}\n\nfunction serializeNodeKey(key: HierarchyNodeKey): string {\n return convertObjectValuesToString(key);\n}\n\nfunction convertObjectValuesToString(obj: object): string {\n return Object.entries(obj)\n .map(([, value]) => {\n if (typeof value === \"object\") {\n return convertObjectValuesToString(value);\n }\n return String(value);\n })\n .join(\",\");\n}\n\n/** @internal */\nexport function sameNodes(lhs: HierarchyNode, rhs: HierarchyNode): boolean {\n if (HierarchyNodeKey.compare(lhs.key, rhs.key) !== 0) {\n return false;\n }\n\n if (lhs.parentKeys.length !== rhs.parentKeys.length) {\n return false;\n }\n\n for (let i = lhs.parentKeys.length - 1; i >= 0; --i) {\n if (HierarchyNodeKey.compare(lhs.parentKeys[i], rhs.parentKeys[i]) !== 0) {\n return false;\n }\n }\n return true;\n}\n\n/** @internal */\nexport const MAX_LIMIT_OVERRIDE = 10000;\n\n/**\n * A helper that disposes the given object, if it's disposable.\n *\n * The first option is to dispose using the deprecated `dispose` method if it exists on the object.\n * If not, we use the new `Symbol.dispose` method. If that doesn't exist either, the object is\n * considered as non-disposable and nothing is done with it.\n *\n * @internal\n */\nexport function safeDispose(disposable: {} | { [Symbol.dispose]: () => void } | { dispose: () => void }) {\n if (\"dispose\" in disposable) {\n disposable.dispose();\n } else if (Symbol.dispose in disposable) {\n disposable[Symbol.dispose]();\n }\n}\n"],"mappings":";;;;;AAYA,SAAgBE,aAAaC,MAAiD;AAC5E,QAAO,CAAC,GAAGA,KAAKE,WAAWC,IAAIC,iBAAiB,EAAEA,iBAAiBJ,KAAKK,IAAI,CAAC,CAACC,KAAK,IAAI;;AAGzF,SAASF,iBAAiBC,KAA+B;AACvD,QAAOE,4BAA4BF,IAAI;;AAGzC,SAASE,4BAA4BC,KAAqB;AACxD,QAAOC,OAAOC,QAAQF,IAAI,CACvBL,KAAK,GAAGQ,WAAW;AAClB,MAAI,OAAOA,UAAU,SACnB,QAAOJ,4BAA4BI,MAAM;AAE3C,SAAOC,OAAOD,MAAM;GACpB,CACDL,KAAK,IAAI;;;AAId,SAAgBO,UAAUC,KAAoBC,KAA6B;AACzE,KAAIlB,iBAAiBmB,QAAQF,IAAIT,KAAKU,IAAIV,IAAI,KAAK,EACjD,QAAO;AAGT,KAAIS,IAAIZ,WAAWe,WAAWF,IAAIb,WAAWe,OAC3C,QAAO;AAGT,MAAK,IAAIC,IAAIJ,IAAIZ,WAAWe,SAAS,GAAGC,KAAK,GAAG,EAAEA,EAChD,KAAIrB,iBAAiBmB,QAAQF,IAAIZ,WAAWgB,IAAIH,IAAIb,WAAWgB,GAAG,KAAK,EACrE,QAAO;AAGX,QAAO;;;AAIT,MAAaC,qBAAqB;;;;;;;;;;AAWlC,SAAgBC,YAAYC,YAA6E;AACvG,KAAI,aAAaA,WACfA,YAAWE,SAAS;UACXD,OAAOC,WAAWF,WAC3BA,YAAWC,OAAOC,UAAU"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorItemRenderer.d.ts","names":[],"sources":["../../../../src/presentation-hierarchies-react/stratakit/ErrorItemRenderer.tsx"],"mappings":";;;;;;;UAgBiB,sBAAA,SAA+B,IAAA,CAAK,iBAAA;EAApC;EAEf,SAAA,EAAW,UAAA,QAAkB,aAAA;;EAE7B,UAAA,GAAa,OAAA;IAAW,YAAA;EAAA;EAEE;EAA1B,YAAA,GAAe,SAAA,EAAW,QAAA;EANoB;EAQ9C,oBAAA,IAAwB,qBAAA,EAAuB,qBAAA;AAAA;;;;;;;;;;iBAYjC,iBAAA,CAAA;EACd,SAAA;EACA,wBAAA;EACA,oBAAA;EACA,UAAA;EACA;AAAA,GACC,sBAAA,GAAyB,GAAA,CAAI,OAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
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 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FlatTreeNode.js","names":["useMemo","TreeNode","FlatPlaceholderItem","id","level","placeholder","FlatTreeNodeItem","levelSize","posInLevel","node","FlatTreeItem","isPlaceholderItem","item","useFlatTreeItems","rootNodes","$","_c","t0","getFlatItems","nodes","flatItems","forEach","index","push","length","isExpanded","error","children","childNodes","useErrorNodes","flatMap","_temp","rootNode","isErrorNode","getErrorNodes","parent","errorList","ReturnType","childErrorList","Pick","Required","undefined"],"sources":["../../../../src/presentation-hierarchies-react/stratakit/FlatTreeNode.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 { useMemo } from \"react\";\n\nimport type { TreeNode } from \"../TreeNode.js\";\n\n/**\n * Placeholder item that is added to hierarchy as a child for a parent item while its child items are loading.\n *\n * @alpha\n */\ninterface FlatPlaceholderItem {\n id: string;\n level: number;\n placeholder: true;\n}\n\n/**\n * An item containing `TreeNode` node with properties needed for a flat tree structure.\n *\n * @alpha\n */\nexport interface FlatTreeNodeItem {\n id: string;\n level: number;\n levelSize: number;\n posInLevel: number;\n node: TreeNode;\n}\n\n/**\n * An Item describing single tree item position and its content inside tree.\n * Returned by `useFlatTreeNodeList` hook.\n *\n * @alpha\n */\nexport type FlatTreeItem = FlatTreeNodeItem | FlatPlaceholderItem;\n\n/** @alpha */\nexport function isPlaceholderItem(item: FlatTreeItem): item is FlatPlaceholderItem {\n return \"placeholder\" in item;\n}\n\n/**\n * Used to get a list of `FlatTreeItem` objects for the given list of `TreeNode` objects that represent\n * a hierarchical structure. The resulting items can be used to render the hierarchy in a flat manner, e.g. using a\n * virtualized list.\n *\n * @alpha\n */\nexport function useFlatTreeItems(rootNodes: TreeNode[]) {\n return useMemo(() => getFlatItems(rootNodes, 1), [rootNodes]);\n}\n\nfunction getFlatItems(nodes: TreeNode[], level: number) {\n const flatItems: FlatTreeItem[] = [];\n nodes.forEach((node, index) => {\n flatItems.push({ node, id: node.id, level, levelSize: nodes.length, posInLevel: index + 1 });\n if (!node.isExpanded || node.error) {\n return;\n }\n if (node.children !== true) {\n const childNodes = getFlatItems(node.children, level + 1);\n flatItems.push(...childNodes);\n return;\n }\n\n flatItems.push({ id: `${node.id}-children-placeholder`, level: level + 1, placeholder: true } satisfies FlatPlaceholderItem);\n });\n return flatItems;\n}\n\n/**\n * Finds and returns all nodes containing errors in a given hierarchy.\n *\n * @alpha\n */\nexport function useErrorNodes(rootNodes: TreeNode[]): Array<TreeNode & Pick<Required<TreeNode>, \"error\">> {\n return useMemo(\n () =>\n rootNodes.flatMap((rootNode) => {\n if (isErrorNode(rootNode)) {\n return [rootNode];\n }\n if (rootNode.children === true) {\n return [];\n }\n return getErrorNodes(rootNode);\n }),\n [rootNodes],\n );\n}\n\nfunction getErrorNodes(parent: TreeNode) {\n const errorList: ReturnType<typeof useErrorNodes> = [];\n\n if (parent.children === true) {\n return [];\n }\n\n parent.children.forEach((node) => {\n if (isErrorNode(node)) {\n errorList.push(node);\n return;\n }\n\n if (node.children !== true) {\n const childErrorList = getErrorNodes(node);\n errorList.push(...childErrorList);\n return;\n }\n });\n return errorList;\n}\n\nfunction isErrorNode(node: TreeNode): node is TreeNode & Pick<Required<TreeNode>, \"error\"> {\n return node.error !== undefined;\n}\n"],"mappings":";;;;AA0CA,SAAgBW,kBAAkBC,MAAiD;AACjF,QAAO,iBAAiBA;;;;;;;;;AAU1B,SAAOC,iBAAAC,WAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAC;AAAA,KAAAF,EAAA,OAAAD,WAAA;AACgBG,OAAAC,aAAaJ,WAAW,EAAE;AAAAC,IAAA,KAAAD;AAAAC,IAAA,KAAAE;OAAAA,MAAAF,EAAA;AAAA,QAA1BE;;AAGvB,SAASC,aAAaC,OAAmBf,OAAe;CACtD,MAAMgB,YAA4B,EAAE;AACpCD,OAAME,SAASZ,MAAMa,UAAU;AAC7BF,YAAUG,KAAK;GAAEd;GAAMN,IAAIM,KAAKN;GAAIC;GAAOG,WAAWY,MAAMK;GAAQhB,YAAYc,QAAQ;GAAG,CAAC;AAC5F,MAAI,CAACb,KAAKgB,cAAchB,KAAKiB,MAC3B;AAEF,MAAIjB,KAAKkB,aAAa,MAAM;GAC1B,MAAMC,aAAaV,aAAaT,KAAKkB,UAAUvB,QAAQ,EAAE;AACzDgB,aAAUG,KAAK,GAAGK,WAAW;AAC7B;;AAGFR,YAAUG,KAAK;GAAEpB,IAAI,GAAGM,KAAKN,GAAE;GAAyBC,OAAOA,QAAQ;GAAGC,aAAa;GAAM,CAA+B;GAC5H;AACF,QAAOe;;;;;;;AAQT,SAAOS,cAAAf,WAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAC;AAAA,KAAAF,EAAA,OAAAD,WAAA;AAGDG,OAAAH,UAASgB,QAASC,MAQhB;AAAAhB,IAAA,KAAAD;AAAAC,IAAA,KAAAE;OAAAA,MAAAF,EAAA;AAAA,QARFE;;AAHC,SAAAc,MAAAC,UAAA;AAIC,KAAIC,YAAYD,SAAS,CAAA,QAChB,CAACA,SAAS;AAEnB,KAAIA,SAAQL,aAAc,KAAI,QACrB,EAAE;AACV,QACMO,cAAcF,SAAS;;AAMtC,SAASE,cAAcC,QAAkB;CACvC,MAAMC,YAA8C,EAAE;AAEtD,KAAID,OAAOR,aAAa,KACtB,QAAO,EAAE;AAGXQ,QAAOR,SAASN,SAASZ,SAAS;AAChC,MAAIwB,YAAYxB,KAAK,EAAE;AACrB2B,aAAUb,KAAKd,KAAK;AACpB;;AAGF,MAAIA,KAAKkB,aAAa,MAAM;GAC1B,MAAMW,iBAAiBJ,cAAczB,KAAK;AAC1C2B,aAAUb,KAAK,GAAGe,eAAe;AACjC;;GAEF;AACF,QAAOF;;AAGT,SAASH,YAAYxB,MAAsE;AACzF,QAAOA,KAAKiB,UAAUe"}
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import { JSX, PropsWithChildren } from "react";
|
|
2
|
-
|
|
3
|
-
//#region src/presentation-hierarchies-react/stratakit/LocalizationContext.d.ts
|
|
4
|
-
/**
|
|
5
|
-
* Localized strings used in the components.
|
|
6
|
-
* @public
|
|
7
|
-
*/
|
|
8
|
-
interface LocalizedStrings {
|
|
9
|
-
/**
|
|
10
|
-
* Message displayed when nodes are loading.
|
|
11
|
-
* Default value: `Loading...`.
|
|
12
|
-
*/
|
|
13
|
-
loading: string;
|
|
14
|
-
/**
|
|
15
|
-
* Title for apply hierarchy filter button.
|
|
16
|
-
* Default value: `Apply filter`.
|
|
17
|
-
*/
|
|
18
|
-
filterHierarchyLevel: string;
|
|
19
|
-
/**
|
|
20
|
-
* Accessible description for applied hierarchy filter button.
|
|
21
|
-
* Default value: `Filter is applied`.
|
|
22
|
-
*/
|
|
23
|
-
filterHierarchyLevelActiveDescription: string;
|
|
24
|
-
/**
|
|
25
|
-
* Title for clear hierarchy filter button.
|
|
26
|
-
* Default value: `Clear active filter`.
|
|
27
|
-
*/
|
|
28
|
-
clearHierarchyLevelFilter: string;
|
|
29
|
-
/**
|
|
30
|
-
* Message displayed when no nodes matching filter are found.
|
|
31
|
-
* Default value: `No matches for current filter for {{node}}.`.
|
|
32
|
-
*/
|
|
33
|
-
noFilteredChildren: string;
|
|
34
|
-
/**
|
|
35
|
-
* Label for change filter action.
|
|
36
|
-
* Default value: `Change filter`.
|
|
37
|
-
*/
|
|
38
|
-
noFilteredChildrenChangeFilter: string;
|
|
39
|
-
/**
|
|
40
|
-
* Message displayed when hierarchy creation for a node failed.
|
|
41
|
-
* Default value: `Failed to create hierarchy for {{node}}.`.
|
|
42
|
-
*/
|
|
43
|
-
failedToCreateHierarchy: string;
|
|
44
|
-
/**
|
|
45
|
-
* Message displayed when hierarchy creation for a node failed.
|
|
46
|
-
* Default value: `Failed to load tree.`.
|
|
47
|
-
*/
|
|
48
|
-
failedToCreateRootHierarchy: string;
|
|
49
|
-
/**
|
|
50
|
-
* Message displayed when result limit exceeds hierarchy size limit.
|
|
51
|
-
* Default value: `The hierarchy for {{node}} contains {{limit}}+ items. Try using filters or increase the limit.`.
|
|
52
|
-
*/
|
|
53
|
-
resultLimitExceeded: string;
|
|
54
|
-
/**
|
|
55
|
-
* Message displayed when result limit exceeds hierarchy size limit.
|
|
56
|
-
* Default value: `The root item hierarchy contains {{limit}}+ items. Try increasing the limit.`.
|
|
57
|
-
*/
|
|
58
|
-
rootResultLimitExceeded: string;
|
|
59
|
-
/**
|
|
60
|
-
* Name for the error region landmark.
|
|
61
|
-
* Default value: `Issues for {{tree_label}}.`.
|
|
62
|
-
*/
|
|
63
|
-
issuesForTree: string;
|
|
64
|
-
/**
|
|
65
|
-
* Label displayed on the error region, when errors are detected.
|
|
66
|
-
* Default value: `{{number_of_issues}} issue(s) found.`.
|
|
67
|
-
*/
|
|
68
|
-
issuesFound: string;
|
|
69
|
-
/**
|
|
70
|
-
* Label displayed on the error region, when no issues are found.
|
|
71
|
-
* Default value: `No issues found.`.
|
|
72
|
-
*/
|
|
73
|
-
noIssuesFound: string;
|
|
74
|
-
/**
|
|
75
|
-
* Message displayed when hierarchy size limit can be overridden.
|
|
76
|
-
* Default value: `Increase limit to {{limit}}`.
|
|
77
|
-
*/
|
|
78
|
-
increaseHierarchyLimit: string;
|
|
79
|
-
/**
|
|
80
|
-
* Message displayed when hierarchy size limit can be overridden.
|
|
81
|
-
* Default value: `Remove limit`.
|
|
82
|
-
*/
|
|
83
|
-
increaseHierarchyLimitToUnlimited: string;
|
|
84
|
-
/**
|
|
85
|
-
* Message displayed when hierarchy size limit can be overridden and hierarchy filtering is enabled.
|
|
86
|
-
* Default value: `Add Filter`.
|
|
87
|
-
*/
|
|
88
|
-
increaseHierarchyLimitWithFiltering: string;
|
|
89
|
-
/**
|
|
90
|
-
* Label for retry action.
|
|
91
|
-
* Default value: `Retry`.
|
|
92
|
-
*/
|
|
93
|
-
retry: string;
|
|
94
|
-
/**
|
|
95
|
-
* Label for rename action.
|
|
96
|
-
* Default value: `Rename`.
|
|
97
|
-
*/
|
|
98
|
-
rename: string;
|
|
99
|
-
/**
|
|
100
|
-
* Label for more actions button.
|
|
101
|
-
* Default value: `More`.
|
|
102
|
-
*/
|
|
103
|
-
more: string;
|
|
104
|
-
/**
|
|
105
|
-
* Label for confirm button.
|
|
106
|
-
* Default value: `Confirm`.
|
|
107
|
-
*/
|
|
108
|
-
confirm: string;
|
|
109
|
-
/**
|
|
110
|
-
* Label for cancel button.
|
|
111
|
-
* Default value: `Cancel`.
|
|
112
|
-
*/
|
|
113
|
-
cancel: string;
|
|
114
|
-
/**
|
|
115
|
-
* Label for tree node rename input.
|
|
116
|
-
* Default value: `New label`.
|
|
117
|
-
*/
|
|
118
|
-
newLabel: string;
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Properties for `LocalizationContextProvider`.
|
|
122
|
-
* @public
|
|
123
|
-
*/
|
|
124
|
-
interface LocalizationContextProviderProps {
|
|
125
|
-
/** Localized strings used in the components. */
|
|
126
|
-
localizedStrings?: Partial<LocalizedStrings>;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Context provider for localized strings used in the components.
|
|
130
|
-
* @public
|
|
131
|
-
*/
|
|
132
|
-
declare function LocalizationContextProvider({
|
|
133
|
-
localizedStrings,
|
|
134
|
-
children
|
|
135
|
-
}: PropsWithChildren<LocalizationContextProviderProps>): JSX.Element;
|
|
136
|
-
//#endregion
|
|
137
|
-
export { LocalizationContextProvider };
|
|
138
|
-
//# sourceMappingURL=LocalizationContext.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LocalizationContext.d.ts","names":[],"sources":["../../../../src/presentation-hierarchies-react/stratakit/LocalizationContext.tsx"],"mappings":";;;;;AAaA;;UAAiB,gBAAA;EAAgB;;;;EAK/B,OAAA;EAoBA;;;;EAfA,oBAAA;EAwCA;;;;EAnCA,qCAAA;EA4DA;;;;EAvDA,yBAAA;EAgFA;;;;EA3EA,kBAAA;EA4HQ;;;;EAvHR,8BAAA;EAyHmB;;;;EApHnB,uBAAA;EA2HyC;;;;EAtHzC,2BAAA;EAsH0E;;;;EAjH1E,mBAAA;EAiH4C;;;;EA5G5C,uBAAA;EA4GgI;;;;EAvGhI,aAAA;;;;;EAKA,WAAA;;;;;EAKA,aAAA;;;;;EAKA,sBAAA;;;;;EAKA,iCAAA;;;;;EAKA,mCAAA;;;;;EAKA,KAAA;;;;;EAKA,MAAA;;;;;EAKA,IAAA;;;;;EAKA,OAAA;;;;;EAKA,MAAA;;;;;EAKA,QAAA;AAAA;;;;;UAuCQ,gCAAA;;EAER,gBAAA,GAAmB,OAAA,CAAQ,gBAAA;AAAA;;;;;iBAOb,2BAAA,CAAA;EAA8B,gBAAA;EAAkB;AAAA,GAAY,iBAAA,CAAkB,gCAAA,IAAoC,GAAA,CAAI,OAAA"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { c } from "react-compiler-runtime";
|
|
2
|
-
import { createContext, useContext } from "react";
|
|
3
|
-
import { jsx } from "react/jsx-runtime";
|
|
4
|
-
|
|
5
|
-
//#region src/presentation-hierarchies-react/stratakit/LocalizationContext.tsx
|
|
6
|
-
const defaultLocalizedStrings = {
|
|
7
|
-
loading: "Loading...",
|
|
8
|
-
filterHierarchyLevel: "Apply filter",
|
|
9
|
-
filterHierarchyLevelActiveDescription: "Filter is applied",
|
|
10
|
-
clearHierarchyLevelFilter: "Clear active filter",
|
|
11
|
-
noFilteredChildren: "No matches for current filter for {{node}}.",
|
|
12
|
-
noFilteredChildrenChangeFilter: "Change filter",
|
|
13
|
-
failedToCreateHierarchy: "Failed to create hierarchy for {{node}}.",
|
|
14
|
-
failedToCreateRootHierarchy: "Failed to load tree.",
|
|
15
|
-
resultLimitExceeded: "The hierarchy for {{node}} contains {{limit}}+ items. Try using filters or increase the limit.",
|
|
16
|
-
rootResultLimitExceeded: "The root item hierarchy contains {{limit}}+ items. Try increasing the limit.",
|
|
17
|
-
issuesForTree: "Issues for {{tree_label}}.",
|
|
18
|
-
issuesFound: "{{number_of_issues}} issue(s) found.",
|
|
19
|
-
noIssuesFound: "No issues found.",
|
|
20
|
-
increaseHierarchyLimit: "Increase limit to {{limit}}",
|
|
21
|
-
increaseHierarchyLimitToUnlimited: "Remove limit",
|
|
22
|
-
increaseHierarchyLimitWithFiltering: "Add Filter",
|
|
23
|
-
retry: "Retry",
|
|
24
|
-
rename: "Rename",
|
|
25
|
-
more: "More",
|
|
26
|
-
confirm: "Confirm",
|
|
27
|
-
cancel: "Cancel",
|
|
28
|
-
newLabel: "New label"
|
|
29
|
-
};
|
|
30
|
-
const localizationContext = createContext({ localizedStrings: defaultLocalizedStrings });
|
|
31
|
-
/**
|
|
32
|
-
* Context provider for localized strings used in the components.
|
|
33
|
-
* @public
|
|
34
|
-
*/
|
|
35
|
-
function LocalizationContextProvider(t0) {
|
|
36
|
-
const $ = c(5);
|
|
37
|
-
const { localizedStrings, children } = t0;
|
|
38
|
-
let t1;
|
|
39
|
-
if ($[0] !== localizedStrings) {
|
|
40
|
-
t1 = { localizedStrings: {
|
|
41
|
-
...defaultLocalizedStrings,
|
|
42
|
-
...localizedStrings
|
|
43
|
-
} };
|
|
44
|
-
$[0] = localizedStrings;
|
|
45
|
-
$[1] = t1;
|
|
46
|
-
} else t1 = $[1];
|
|
47
|
-
const state = t1;
|
|
48
|
-
let t2;
|
|
49
|
-
if ($[2] !== children || $[3] !== state) {
|
|
50
|
-
t2 = /* @__PURE__ */ jsx(localizationContext.Provider, {
|
|
51
|
-
value: state,
|
|
52
|
-
children
|
|
53
|
-
});
|
|
54
|
-
$[2] = children;
|
|
55
|
-
$[3] = state;
|
|
56
|
-
$[4] = t2;
|
|
57
|
-
} else t2 = $[4];
|
|
58
|
-
return t2;
|
|
59
|
-
}
|
|
60
|
-
/** @internal */
|
|
61
|
-
function useLocalizationContext() {
|
|
62
|
-
return useContext(localizationContext);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
//#endregion
|
|
66
|
-
export { LocalizationContextProvider, useLocalizationContext };
|
|
67
|
-
//# sourceMappingURL=LocalizationContext.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LocalizationContext.js","names":["createContext","useContext","useMemo","JSX","PropsWithChildren","LocalizedStrings","loading","filterHierarchyLevel","filterHierarchyLevelActiveDescription","clearHierarchyLevelFilter","noFilteredChildren","noFilteredChildrenChangeFilter","failedToCreateHierarchy","failedToCreateRootHierarchy","resultLimitExceeded","rootResultLimitExceeded","issuesForTree","issuesFound","noIssuesFound","increaseHierarchyLimit","increaseHierarchyLimitToUnlimited","increaseHierarchyLimitWithFiltering","retry","rename","more","confirm","cancel","newLabel","LocalizationContext","localizedStrings","defaultLocalizedStrings","localizationContext","LocalizationContextProviderProps","Partial","LocalizationContextProvider","t0","$","_c","children","t1","state","t2","useLocalizationContext"],"sources":["../../../../src/presentation-hierarchies-react/stratakit/LocalizationContext.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 { createContext, useContext, useMemo } from \"react\";\n\nimport type { JSX, PropsWithChildren } from \"react\";\n\n/**\n * Localized strings used in the components.\n * @public\n */\nexport interface LocalizedStrings {\n /**\n * Message displayed when nodes are loading.\n * Default value: `Loading...`.\n */\n loading: string;\n /**\n * Title for apply hierarchy filter button.\n * Default value: `Apply filter`.\n */\n filterHierarchyLevel: string;\n /**\n * Accessible description for applied hierarchy filter button.\n * Default value: `Filter is applied`.\n */\n filterHierarchyLevelActiveDescription: string;\n /**\n * Title for clear hierarchy filter button.\n * Default value: `Clear active filter`.\n */\n clearHierarchyLevelFilter: string;\n /**\n * Message displayed when no nodes matching filter are found.\n * Default value: `No matches for current filter for {{node}}.`.\n */\n noFilteredChildren: string;\n /**\n * Label for change filter action.\n * Default value: `Change filter`.\n */\n noFilteredChildrenChangeFilter: string;\n /**\n * Message displayed when hierarchy creation for a node failed.\n * Default value: `Failed to create hierarchy for {{node}}.`.\n */\n failedToCreateHierarchy: string;\n /**\n * Message displayed when hierarchy creation for a node failed.\n * Default value: `Failed to load tree.`.\n */\n failedToCreateRootHierarchy: string;\n /**\n * Message displayed when result limit exceeds hierarchy size limit.\n * Default value: `The hierarchy for {{node}} contains {{limit}}+ items. Try using filters or increase the limit.`.\n */\n resultLimitExceeded: string;\n /**\n * Message displayed when result limit exceeds hierarchy size limit.\n * Default value: `The root item hierarchy contains {{limit}}+ items. Try increasing the limit.`.\n */\n rootResultLimitExceeded: string;\n /**\n * Name for the error region landmark.\n * Default value: `Issues for {{tree_label}}.`.\n */\n issuesForTree: string;\n /**\n * Label displayed on the error region, when errors are detected.\n * Default value: `{{number_of_issues}} issue(s) found.`.\n */\n issuesFound: string;\n /**\n * Label displayed on the error region, when no issues are found.\n * Default value: `No issues found.`.\n */\n noIssuesFound: string;\n /**\n * Message displayed when hierarchy size limit can be overridden.\n * Default value: `Increase limit to {{limit}}`.\n */\n increaseHierarchyLimit: string;\n /**\n * Message displayed when hierarchy size limit can be overridden.\n * Default value: `Remove limit`.\n */\n increaseHierarchyLimitToUnlimited: string;\n /**\n * Message displayed when hierarchy size limit can be overridden and hierarchy filtering is enabled.\n * Default value: `Add Filter`.\n */\n increaseHierarchyLimitWithFiltering: string;\n /**\n * Label for retry action.\n * Default value: `Retry`.\n */\n retry: string;\n /**\n * Label for rename action.\n * Default value: `Rename`.\n */\n rename: string;\n /**\n * Label for more actions button.\n * Default value: `More`.\n */\n more: string;\n /**\n * Label for confirm button.\n * Default value: `Confirm`.\n */\n confirm: string;\n /**\n * Label for cancel button.\n * Default value: `Cancel`.\n */\n cancel: string;\n /**\n * Label for tree node rename input.\n * Default value: `New label`.\n */\n newLabel: string;\n}\n\n/** @internal */\nexport interface LocalizationContext {\n localizedStrings: LocalizedStrings;\n}\n\nconst defaultLocalizedStrings: LocalizedStrings = {\n loading: \"Loading...\",\n filterHierarchyLevel: \"Apply filter\",\n filterHierarchyLevelActiveDescription: \"Filter is applied\",\n clearHierarchyLevelFilter: \"Clear active filter\",\n noFilteredChildren: \"No matches for current filter for {{node}}.\",\n noFilteredChildrenChangeFilter: \"Change filter\",\n failedToCreateHierarchy: \"Failed to create hierarchy for {{node}}.\",\n failedToCreateRootHierarchy: \"Failed to load tree.\",\n resultLimitExceeded: \"The hierarchy for {{node}} contains {{limit}}+ items. Try using filters or increase the limit.\",\n rootResultLimitExceeded: \"The root item hierarchy contains {{limit}}+ items. Try increasing the limit.\",\n issuesForTree: \"Issues for {{tree_label}}.\",\n issuesFound: \"{{number_of_issues}} issue(s) found.\",\n noIssuesFound: \"No issues found.\",\n increaseHierarchyLimit: \"Increase limit to {{limit}}\",\n increaseHierarchyLimitToUnlimited: \"Remove limit\",\n increaseHierarchyLimitWithFiltering: \"Add Filter\",\n retry: \"Retry\",\n rename: \"Rename\",\n more: \"More\",\n confirm: \"Confirm\",\n cancel: \"Cancel\",\n newLabel: \"New label\",\n};\n\nconst localizationContext = createContext<LocalizationContext>({ localizedStrings: defaultLocalizedStrings });\n\n/**\n * Properties for `LocalizationContextProvider`.\n * @public\n */\ninterface LocalizationContextProviderProps {\n /** Localized strings used in the components. */\n localizedStrings?: Partial<LocalizedStrings>;\n}\n\n/**\n * Context provider for localized strings used in the components.\n * @public\n */\nexport function LocalizationContextProvider({ localizedStrings, children }: PropsWithChildren<LocalizationContextProviderProps>): JSX.Element {\n const state = useMemo(() => ({ localizedStrings: { ...defaultLocalizedStrings, ...localizedStrings } }), [localizedStrings]);\n return <localizationContext.Provider value={state}>{children}</localizationContext.Provider>;\n}\n\n/** @internal */\nexport function useLocalizationContext() {\n return useContext(localizationContext);\n}\n"],"mappings":";;;;;AAmIA,MAAM8B,0BAA4C;CAChDxB,SAAS;CACTC,sBAAsB;CACtBC,uCAAuC;CACvCC,2BAA2B;CAC3BC,oBAAoB;CACpBC,gCAAgC;CAChCC,yBAAyB;CACzBC,6BAA6B;CAC7BC,qBAAqB;CACrBC,yBAAyB;CACzBC,eAAe;CACfC,aAAa;CACbC,eAAe;CACfC,wBAAwB;CACxBC,mCAAmC;CACnCC,qCAAqC;CACrCC,OAAO;CACPC,QAAQ;CACRC,MAAM;CACNC,SAAS;CACTC,QAAQ;CACRC,UAAU;CACX;AAED,MAAMI,sBAAsB/B,cAAmC,EAAE6B,kBAAkBC,yBAAyB,CAAC;;;;;AAe7G,SAAOI,4BAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAqC,MAAA,EAAAR,kBAAAS,aAAAH;CAAmF,IAAAI;AAAA,KAAAH,EAAA,OAAAP,kBAAA;AAChGU,OAAA,EAAAV,kBAAoB;GAAA,GAAKC;GAAuB,GAAKD;GAAiB,EAAG;AAAAO,IAAA,KAAAP;AAAAO,IAAA,KAAAG;OAAAA,MAAAH,EAAA;CAAtG,MAAAI,QAA6BD;CAAgG,IAAAE;AAAA,KAAAL,EAAA,OAAAE,YAAAF,EAAA,OAAAI,OAAA;AACtHC,OAAA,oBAAA,oBAAA;GAAqCD,OAAAA;GAAQF;IAAwC;AAAAF,IAAA,KAAAE;AAAAF,IAAA,KAAAI;AAAAJ,IAAA,KAAAK;OAAAA,MAAAL,EAAA;AAAA,QAArFK;;;AAIT,SAAOC,yBAAA;AAAA,QACEzC,WAAW8B,oBAAoB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RootErrorRenderer.d.ts","names":[],"sources":["../../../../src/presentation-hierarchies-react/stratakit/RootErrorRenderer.tsx"],"mappings":";;;;;;;AAiBA;KAAY,+BAAA;;;;EAIV,KAAA,EAAO,SAAA;AAAA,IACL,sBAAA;;;AAOJ;;;iBAAgB,0BAAA,CAAA;EAA6B,KAAA;EAAO,wBAAA;EAA0B;AAAA,GAAc,+BAAA,GAAkC,GAAA,CAAI,OAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RootErrorRenderer.js","names":["Button","Text","Icon","errorSvg","useLocalizationContext","JSX","RootErrorRendererProps","ErrorInfo","StrataKitRootErrorRendererProps","error","StrataKitRootErrorRenderer","t0","$","_c","getHierarchyLevelDetails","reloadTree","localizedStrings","type","t1","undefined","setSizeLimit","onOverrideLimit","t2","resultSetSizeLimit","rootResultLimitExceeded","replace","toString","t3","increaseHierarchyLimitToUnlimited","action","label","condition","_temp","t4","parentNodeId","state","retry","_temp2","failedToCreateRootHierarchy","RootErrorContainerProps","message","actions","RootErrorContainer","Symbol","for","height","display","flexDirection","justifyContent","alignItems","gap","textAlign","t5","filter","_temp3","map","_temp4","t6"],"sources":["../../../../src/presentation-hierarchies-react/stratakit/RootErrorRenderer.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 { Button, Text } from \"@stratakit/bricks\";\nimport { Icon } from \"@stratakit/foundations\";\nimport errorSvg from \"@stratakit/icons/status-error.svg\";\nimport { useLocalizationContext } from \"./LocalizationContext.js\";\n\nimport type { JSX } from \"react\";\nimport type { RootErrorRendererProps } from \"../Renderers.js\";\nimport type { ErrorInfo } from \"../TreeNode.js\";\n\n/**\n * @alpha\n */\nexport type StrataKitRootErrorRendererProps = {\n /**\n * Root error to be displayed\n */\n error: ErrorInfo;\n} & RootErrorRendererProps;\n\n/**\n * A component that renders root node error state.\n *\n * @alpha\n */\nexport function StrataKitRootErrorRenderer({ error, getHierarchyLevelDetails, reloadTree }: StrataKitRootErrorRendererProps): JSX.Element {\n const { localizedStrings } = useLocalizationContext();\n\n if (error.type === \"ResultSetTooLarge\") {\n const onOverrideLimit = () => getHierarchyLevelDetails(undefined)?.setSizeLimit(\"unbounded\");\n return (\n <RootErrorContainer\n message={localizedStrings.rootResultLimitExceeded.replace(\"{{limit}}\", error.resultSetSizeLimit.toString())}\n actions={[\n {\n action: onOverrideLimit,\n label: localizedStrings.increaseHierarchyLimitToUnlimited,\n condition: () => true,\n },\n ]}\n />\n );\n }\n\n return (\n <RootErrorContainer\n message={localizedStrings.failedToCreateRootHierarchy}\n actions={[\n {\n action: () => reloadTree({ parentNodeId: undefined, state: \"reset\" }),\n label: localizedStrings.retry,\n condition: () => true,\n },\n ]}\n />\n );\n}\n\ninterface RootErrorContainerProps {\n message: string;\n actions?: { action: () => void; label: string; condition: () => boolean }[];\n}\n\nfunction RootErrorContainer({ actions, message }: RootErrorContainerProps) {\n return (\n <div style={{ height: \"100%\", display: \"flex\", flexDirection: \"column\", justifyContent: \"center\", alignItems: \"center\", gap: \"0.5rem\" }}>\n <Icon href={errorSvg} size=\"large\" />\n <Text variant={\"body-sm\"} style={{ textAlign: \"center\" }}>\n {message}\n </Text>\n {actions\n ?.filter(({ condition }) => condition())\n .map((action) => {\n return (\n <Button key={action.label} onClick={() => action.action()}>\n {action.label}\n </Button>\n );\n })}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeAction.d.ts","names":[],"sources":["../../../../src/presentation-hierarchies-react/stratakit/TreeAction.tsx"],"mappings":";;;;;;AAeA;;;UAAiB,wBAAA;EAaX;AAIN;;;;;;EATE,OAAA;EASiG;;;;EAJjG,IAAA;AAAA;;KAIU,mBAAA,GAAsB,cAAA,QAAsB,IAAA,CAAK,UAAA,IAAc,wBAAA;;;;;;;;;;;;;;;;;;;;cAqB9D,cAAA,EAAgB,oBAAA,CAAqB,mBAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeAction.js","names":["memo","DropdownMenu","Tree","ComponentProps","NamedExoticComponent","TreeActionBaseAttributes","variant","hide","TreeActionBaseProps","ItemAction","TreeActionBase","t0","$","_c","actionProps","dot","t1","visible","undefined","t2","t3"],"sources":["../../../../src/presentation-hierarchies-react/stratakit/TreeAction.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 { memo } from \"react\";\nimport { DropdownMenu, Tree } from \"@stratakit/structures\";\n\nimport type { ComponentProps, NamedExoticComponent } from \"react\";\n\n/**\n * Attributes used to decide how to render tree actions. They allow to differentiate action style based on the context\n * where that action is used.\n * @alpha\n */\nexport interface TreeActionBaseAttributes {\n /**\n * Specifies action variant supported by tree nodes:\n *\n * - \"default\" - standard action displayed in the dropdown menu accessible through the ellipsis button on the node.\n * - \"inline\" - actions displayed directly on the tree node.\n * - \"context-menu\" - actions displayed in the context menu opened by right-clicking the tree node.\n */\n variant?: \"default\" | \"inline\" | \"context-menu\";\n /**\n * Indicates that the actions is not applicable for current tree node and should be hidden.\n * When set to true, the action will not be rendered at all.\n */\n hide?: boolean;\n}\n\n/** @alpha */\nexport type TreeActionBaseProps = ComponentProps<typeof Tree.ItemAction> & TreeActionBaseAttributes;\n\n/**\n * Base component used to render tree actions. It is designed to allow rendering same action in different contexts: inline, dropdown, context menu.\n * Should be used together with `StrataKitTreeNodeRenderer` and returned from `getInlineActions`, `getMenuActions` and `getContextMenuActions` callbacks.\n *\n * When implementing custom action that returns this component, make sure to forward `TreeActionBaseAttributes` props to it. Example:\n *\n * ```tsx\n * interface MyCustomTreeActionProps extends TreeActionBaseAttributes {\n * myProp: string\n * }\n *\n * function MyCustomTreeAction({ myProp, ...attributes }: MyCustomTreeActionProps) {\n * // custom button logic goes here\n * return <TreeActionBase {...attributes} icon={...} onClick={...} />\n * }\n * ```\n *\n * @alpha\n */\nexport const TreeActionBase: NamedExoticComponent<TreeActionBaseProps> = memo(function TreeActionBase({\n hide,\n variant = \"default\",\n dot,\n visible,\n ...actionProps\n}: TreeActionBaseProps) {\n if (hide) {\n return variant === \"inline\" ? <Tree.ItemAction {...actionProps} visible={false} /> : undefined;\n }\n\n if (variant === \"context-menu\") {\n return <DropdownMenu.Item {...actionProps} />;\n }\n\n return <Tree.ItemAction {...actionProps} dot={dot} visible={variant === \"inline\" ? visible : undefined} />;\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAqDA,MAAaU,iBAA4DV,KAAK,SAAAU,eAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAR;CAAA,IAAAS;CAAA,IAAAC;AAAA,KAAAL,EAAA,OAAAD,IAAA;AAAwB,GAAA,CAAAJ,MAAAD,SAAAU,IAAAD,KAAAE,YAAAH,eAAAH;AAMhFC,IAAA,KAAAD;AAAAC,IAAA,KAAAE;AAAAF,IAAA,KAAAG;AAAAH,IAAA,KAAAL;AAAAK,IAAA,KAAAI;AAAAJ,IAAA,KAAAK;QAAA;AAAAH,gBAAAF,EAAA;AAAAG,QAAAH,EAAA;AAAAL,SAAAK,EAAA;AAAAI,OAAAJ,EAAA;AAAAK,YAAAL,EAAA;;CAJpB,MAAAN,UAAAU,OAAAE,SAAA,YAAAF;AAKA,KAAIT,MAAI;EAAA,IAAAY;AAAA,MAAAP,EAAA,OAAAE,eAAAF,EAAA,OAAAN,SAAA;AACCa,QAAAb,YAAY,WAAW,oBAAA,KAAA;IAAA,GAAqBQ;IAAsB,SAAA;KAAqB,GAAvFI;AAAuFN,KAAA,KAAAE;AAAAF,KAAA,KAAAN;AAAAM,KAAA,KAAAO;QAAAA,MAAAP,EAAA;AAAA,SAAvFO;;AAGT,KAAIb,YAAY,gBAAc;EAAA,IAAAa;AAAA,MAAAP,EAAA,OAAAE,aAAA;AACrBK,QAAA,oBAAA,aAAA,QAAA,GAAuBL,cAAe;AAAAF,KAAA,KAAAE;AAAAF,KAAA,MAAAO;QAAAA,MAAAP,EAAA;AAAA,SAAtCO;;CAGmD,MAAAA,KAAAb,YAAY,WAAZW,UAAAC;CAA0C,IAAAE;AAAA,KAAAR,EAAA,QAAAE,eAAAF,EAAA,QAAAG,OAAAH,EAAA,QAAAO,IAAA;AAA/FC,OAAA,oBAAA,KAAA;GAAA,GAAqBN;GAAkBC;GAAc,SAAAI;IAA8C;AAAAP,IAAA,MAAAE;AAAAF,IAAA,MAAAG;AAAAH,IAAA,MAAAO;AAAAP,IAAA,MAAAQ;OAAAA,MAAAR,EAAA;AAAA,QAAnGQ;EACP"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeErrorRenderer.d.ts","names":[],"sources":["../../../../src/presentation-hierarchies-react/stratakit/TreeErrorRenderer.tsx"],"mappings":";;;;;;;AAYuD;;;UAO7C,yBAAA;EAOI;;;;EAFZ,SAAA;EAAA;EAEA,UAAA,EAAY,UAAA,QAAkB,aAAA;EAAlB;EAEZ,WAAA,IAAe,KAAA,EAAO,sBAAA,KAA2B,YAAA;AAAA;;KAIvC,sBAAA,GAAyB,yBAAA,GAA4B,IAAA,CAAK,sBAAA;;;;AAAtE;;;iBAQgB,iBAAA,CAAA;EAAoB,SAAA;EAAW,UAAA;EAAY,WAAA;EAAA,GAAgB;AAAA,GAA0B,sBAAA,GAAyB,GAAA,CAAI,OAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeErrorRenderer.js","names":["cloneElement","unstable_ErrorRegion","ErrorRegion","ErrorItemRenderer","useLocalizationContext","JSX","ReactElement","ErrorItemRendererProps","useErrorNodes","TreeErrorRendererOwnProps","treeLabel","errorNodes","ReturnType","renderError","props","TreeErrorRendererProps","Omit","TreeErrorRenderer","t0","$","_c","errorItemRendererProps","localizedStrings","errorItems","map","errorNode","errorRendererProps","key","id","t1","Symbol","for","width","t2","issuesForTree","replace","t3","length","issuesFound","noIssuesFound","toString","t4"],"sources":["../../../../src/presentation-hierarchies-react/stratakit/TreeErrorRenderer.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 { cloneElement } from \"react\";\nimport { unstable_ErrorRegion as ErrorRegion } from \"@stratakit/structures\";\nimport { ErrorItemRenderer } from \"./ErrorItemRenderer.js\";\nimport { useLocalizationContext } from \"./LocalizationContext.js\";\n\nimport type { JSX, ReactElement } from \"react\";\nimport type { ErrorItemRendererProps } from \"./ErrorItemRenderer.js\";\nimport type { useErrorNodes } from \"./FlatTreeNode.js\";\n\n/**\n * Interface containing building blocks for `TreeErrorRenderer`.\n *\n * @alpha\n */\ninterface TreeErrorRendererOwnProps {\n /**\n * A user friendly display label of the tree. Should be unique within the consuming application,\n * as it's used for creating a unique accessible label for the error region.\n */\n treeLabel: string;\n /** List of error nodes to render errors for. */\n errorNodes: ReturnType<typeof useErrorNodes>;\n /** Callback to render custom error messages. Component should be wrapped in `ErrorRegion.Item` from `@itwin/itwinui-react` package. */\n renderError?: (props: ErrorItemRendererProps) => ReactElement;\n}\n\n/** @alpha */\nexport type TreeErrorRendererProps = TreeErrorRendererOwnProps & Omit<ErrorItemRendererProps, \"errorNode\">;\n\n/**\n * A component that renders error display dropdown using the `unstable_ErrorRegion` component from `@itwin/itwinui-react`.\n * As input, the component uses a list of `ErrorNode` objects, which are generally created using the `useErrorList` hook.\n *\n * @alpha\n */\nexport function TreeErrorRenderer({ treeLabel, errorNodes, renderError, ...errorItemRendererProps }: TreeErrorRendererProps): JSX.Element {\n const { localizedStrings } = useLocalizationContext();\n const errorItems = errorNodes.map((errorNode) => {\n const errorRendererProps: ErrorItemRendererProps = {\n errorNode,\n ...errorItemRendererProps,\n };\n\n if (renderError) {\n return cloneElement(renderError(errorRendererProps), { key: errorNode.id });\n }\n\n return <ErrorItemRenderer key={errorNode.id} {...errorRendererProps} />;\n });\n\n return (\n <ErrorRegion.Root\n style={{ width: \"100%\" }}\n aria-label={localizedStrings.issuesForTree.replace(\"{{tree_label}}\", treeLabel)}\n label={\n errorNodes.length === 0 ? localizedStrings.noIssuesFound : localizedStrings.issuesFound.replace(\"{{number_of_issues}}\", errorNodes.length.toString())\n }\n items={errorItems}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAwCA,SAAOiB,kBAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAA2B,MAAA,EAAAV,WAAAC,YAAAE,aAAA,GAAAQ,2BAAAH;CAChC,MAAA,EAAAI,qBAA6BlB,wBAAwB;CACrD,MAAAmB,aAAmBZ,WAAUa,KAAKC,cAAA;EAChC,MAAAC,qBAAmD;GAAAD;GAAA,GAE9CJ;GACJ;AAED,MAAIR,YAAW,QACNb,aAAaa,YAAYa,mBAAmB,EAAE,EAAAC,KAAOF,UAASG,IAAK,CAAC;AAC5E,SAEM,oBAAC,qBAAmC,GAAMF,sBAAlBD,UAASG,GAA+B;GACvE;CAAC,IAAAC;AAAA,KAAAV,EAAA,OAAAW,OAAAC,IAAA,4BAAA,EAAA;AAIQF,OAAA,EAAAG,OAAS,QAAQ;AAAAb,IAAA,KAAAU;OAAAA,MAAAV,EAAA;CAAA,IAAAc;AAAA,KAAAd,EAAA,OAAAG,iBAAAY,iBAAAf,EAAA,OAAAT,WAAA;AACZuB,OAAAX,iBAAgBY,cAAcC,QAAS,kBAAkBzB,UAAU;AAAAS,IAAA,KAAAG,iBAAAY;AAAAf,IAAA,KAAAT;AAAAS,IAAA,KAAAc;OAAAA,MAAAd,EAAA;CAAA,IAAAiB;AAAA,KAAAjB,EAAA,OAAAR,WAAA0B,UAAAlB,EAAA,OAAAG,iBAAAgB,eAAAnB,EAAA,OAAAG,iBAAAiB,eAAA;AAE7EH,OAAAzB,WAAU0B,WAAY,IAAIf,iBAAgBiB,gBAAiBjB,iBAAgBgB,YAAYH,QAAS,wBAAwBxB,WAAU0B,OAAOG,UAAW,CAAC;AAAArB,IAAA,KAAAR,WAAA0B;AAAAlB,IAAA,KAAAG,iBAAAgB;AAAAnB,IAAA,KAAAG,iBAAAiB;AAAApB,IAAA,KAAAiB;OAAAA,MAAAjB,EAAA;CAAA,IAAAsB;AAAA,KAAAtB,EAAA,OAAAI,cAAAJ,EAAA,OAAAc,MAAAd,EAAA,QAAAiB,IAAA;AAJzJK,OAAA,oBAAA,qBAAA;GACS,OAAAZ;GACK,cAAAI;GAEV,OAAAG;GAEKb,OAAAA;IACP;AAAAJ,IAAA,KAAAI;AAAAJ,IAAA,KAAAc;AAAAd,IAAA,MAAAiB;AAAAjB,IAAA,MAAAsB;OAAAA,MAAAtB,EAAA;AAAA,QAPFsB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeNodeFilterAction.d.ts","names":[],"sources":["../../../../src/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.tsx"],"mappings":";;;;;;;KAgBK,yBAAA;EAAA;;;EAIH,QAAA,IAAY,qBAAA,EAAuB,qBAAA;AAAA,IACjC,wBAAA,GACF,IAAA,CAAK,iBAAA;;;;;;;;;;;cAYM,oBAAA,EAAsB,oBAAA,CAAqB,yBAAA;EAA8B,IAAA,EAAM,QAAA;AAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeNodeFilterAction.js","names":["memo","useCallback","filterSvg","useLocalizationContext","TreeActionBase","NamedExoticComponent","HierarchyLevelDetails","TreeRendererProps","TreeNode","TreeActionBaseAttributes","TreeNodeFilterActionProps","onFilter","hierarchyLevelDetails","Pick","TreeNodeFilterAction","node","t0","$","_c","actionAttributes","getHierarchyLevelDetails","localizedStrings","filterHierarchyLevel","filterHierarchyLevelActiveDescription","t1","id","handleClick","t2","isFiltered","undefined","t3","t4","isFilterable","t5"],"sources":["../../../../src/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.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 { memo, useCallback } from \"react\";\nimport filterSvg from \"@stratakit/icons/filter.svg\";\nimport { useLocalizationContext } from \"./LocalizationContext.js\";\nimport { TreeActionBase } from \"./TreeAction.js\";\n\nimport type { NamedExoticComponent } from \"react\";\nimport type { HierarchyLevelDetails, TreeRendererProps } from \"../Renderers.js\";\nimport type { TreeNode } from \"../TreeNode.js\";\nimport type { TreeActionBaseAttributes } from \"./TreeAction.js\";\n\n/** @alpha */\ntype TreeNodeFilterActionProps = {\n /**\n * Action to perform when the filter button is clicked for this node.\n */\n onFilter?: (hierarchyLevelDetails: HierarchyLevelDetails) => void;\n} & TreeActionBaseAttributes &\n Pick<TreeRendererProps, \"getHierarchyLevelDetails\">;\n\n/**\n * React component that renders a filter action for a tree item.\n *\n * The action calls the `onFilter` callback prop when clicked.\n *\n * @see `getMenuActions`, `getInlineActions`, `getContextMenuActions` props of `TreeRenderer` to add this action\n * to tree items.\n *\n * @alpha\n */\nexport const TreeNodeFilterAction: NamedExoticComponent<TreeNodeFilterActionProps & { node: TreeNode }> = memo(function TreeNodeFilterAction({\n node,\n onFilter,\n getHierarchyLevelDetails,\n ...actionAttributes\n}: TreeNodeFilterActionProps & { node: TreeNode }) {\n const { localizedStrings } = useLocalizationContext();\n const { filterHierarchyLevel, filterHierarchyLevelActiveDescription } = localizedStrings;\n\n const handleClick = useCallback(() => {\n const hierarchyLevelDetails = getHierarchyLevelDetails(node.id);\n hierarchyLevelDetails && onFilter?.(hierarchyLevelDetails);\n }, [node, getHierarchyLevelDetails, onFilter]);\n\n return (\n <TreeActionBase\n {...actionAttributes}\n label={filterHierarchyLevel}\n onClick={handleClick}\n icon={filterSvg}\n visible={node.isFiltered ? true : undefined}\n dot={node.isFiltered ? filterHierarchyLevelActiveDescription : undefined}\n hide={!onFilter || !node.isFilterable}\n />\n );\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;AAkCA,MAAac,uBAA6Fd,KAAK,SAAAc,qBAAAE,IAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAL;CAAA,IAAAJ;AAAA,KAAAM,EAAA,OAAAD,IAAA;AAA8B,GAAA,CAAAD,MAAAJ,UAAAS,6BAAAD,oBAAAH;AAK5FC,IAAA,KAAAD;AAAAC,IAAA,KAAAE;AAAAF,IAAA,KAAAG;AAAAH,IAAA,KAAAF;AAAAE,IAAA,KAAAN;QAAA;AAAAQ,qBAAAF,EAAA;AAAAG,6BAAAH,EAAA;AAAAF,SAAAE,EAAA;AAAAN,aAAAM,EAAA;;CAC/C,MAAA,EAAAI,qBAA6BlB,wBAAwB;CACrD,MAAA,EAAAmB,sBAAAC,0CAAwEF;CAAiB,IAAAG;AAAA,KAAAP,EAAA,OAAAG,4BAAAH,EAAA,OAAAF,KAAAU,MAAAR,EAAA,OAAAN,UAAA;AAEzDa,aAAA;GAC9B,MAAAZ,wBAA8BQ,yBAAyBL,KAAIU,GAAI;AAC/Db,4BAAyBD,WAAWC,sBAAsB;;AAC3DK,IAAA,KAAAG;AAAAH,IAAA,KAAAF,KAAAU;AAAAR,IAAA,KAAAN;AAAAM,IAAA,KAAAO;OAAAA,MAAAP,EAAA;CAHD,MAAAS,cAAoBF;CAWP,MAAAG,KAAAZ,KAAIa,aAAJ,OAAAC;CACJ,MAAAC,KAAAf,KAAIa,aAAJL,wCAAAM;CACC,MAAAE,KAAA,CAACpB,YAAD,CAAcI,KAAIiB;CAAa,IAAAC;AAAA,KAAAhB,EAAA,OAAAE,oBAAAF,EAAA,QAAAK,wBAAAL,EAAA,QAAAS,eAAAT,EAAA,QAAAU,MAAAV,EAAA,QAAAa,MAAAb,EAAA,QAAAc,IAAA;AAPvCE,OAAA,oBAAC;GAAc,GACTd;GACGG,OAAAA;GACEI,SAAAA;GACHxB,MAAAA;GACG,SAAAyB;GACJ,KAAAG;GACC,MAAAC;IACN;AAAAd,IAAA,KAAAE;AAAAF,IAAA,MAAAK;AAAAL,IAAA,MAAAS;AAAAT,IAAA,MAAAU;AAAAV,IAAA,MAAAa;AAAAb,IAAA,MAAAc;AAAAd,IAAA,MAAAgB;OAAAA,MAAAhB,EAAA;AAAA,QARFgB;EAUF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeNodeRenameAction.d.ts","names":[],"sources":["../../../../src/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.tsx"],"mappings":";;;;;;;;;AAyBA;;;;;;;;cAAa,oBAAA,EAAsB,oBAAA,CAAqB,wBAAA;EAA6B,IAAA,EAAM,QAAA;AAAA;;UAkB1E,oBAAA;EAlBkF;AAkBnG;;;EAKE,cAAA,GAAiB,QAAA;EACjB,mBAAA;EACA,QAAA,IAAY,QAAA;AAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeNodeRenameAction.js","names":["createContext","memo","useCallback","useContext","useMemo","useState","renameSvg","useLocalizationContext","TreeActionBase","NamedExoticComponent","PropsWithChildren","TreeNode","TreeActionBaseAttributes","TreeNodeRenameAction","node","t0","$","_c","actionAttributes","localizedStrings","context","useTreeNodeRenameContext","rename","t1","canRename","startRename","t2","handleClick","t3","t4","TreeNodeEditingProps","onLabelChanged","newLabel","labelValidationHint","validate","RenameParameters","nodeId","commit","TreeNodeRenameContext","renameParameters","cancelRename","treeNodeRenameContext","undefined","TreeNodeRenameContextProvider","value","children","useTreeNodeRenameContextValue","getEditingProps","setRenameParameters","id","Symbol","for","node_0"],"sources":["../../../../src/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.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 { createContext, memo, useCallback, useContext, useMemo, useState } from \"react\";\nimport renameSvg from \"@stratakit/icons/rename.svg\";\nimport { useLocalizationContext } from \"./LocalizationContext.js\";\nimport { TreeActionBase } from \"./TreeAction.js\";\n\nimport type { NamedExoticComponent, PropsWithChildren } from \"react\";\nimport type { TreeNode } from \"../TreeNode.js\";\nimport type { TreeActionBaseAttributes } from \"./TreeAction.js\";\n\n/**\n * React component that renders a rename action for a tree item.\n *\n * The tree component must have `getEditingProps.onLabelChanged` prop set to enable renaming functionality. When\n * rename is completed, the `onLabelChanged` function is called to make the actual data update.\n *\n * @see `getMenuActions`, `getInlineActions`, `getContextMenuActions` props of `TreeRenderer` to add this action\n * to tree items.\n *\n * @alpha\n */\nexport const TreeNodeRenameAction: NamedExoticComponent<TreeActionBaseAttributes & { node: TreeNode }> = memo(function TreeNodeRenameAction({\n node,\n ...actionAttributes\n}: TreeActionBaseAttributes & { node: TreeNode }) {\n const { localizedStrings } = useLocalizationContext();\n const context = useTreeNodeRenameContext();\n const { rename } = localizedStrings;\n\n const canRename = context?.canRename(node) ?? false;\n const startRename = context?.startRename;\n const handleClick = useCallback(() => {\n startRename?.(node);\n }, [startRename, node]);\n\n return <TreeActionBase {...actionAttributes} label={rename} onClick={handleClick} icon={renameSvg} hide={!canRename} />;\n});\n\n/** @alpha */\nexport interface TreeNodeEditingProps {\n /**\n * A callback that is invoked when node label is changed. Should be used together\n * with `<TreeNodeRenameAction />` to enter label editing mode.\n */\n onLabelChanged: (newLabel: string) => void;\n labelValidationHint?: string;\n validate?: (newLabel: string) => boolean;\n}\n\n/** @internal */\nexport interface RenameParameters {\n nodeId: string;\n commit: (newLabel: string) => void;\n labelValidationHint?: string;\n validate?: (newLabel: string) => boolean;\n}\n\ninterface TreeNodeRenameContext {\n renameParameters?: RenameParameters;\n startRename: (node: TreeNode) => void;\n canRename: (node: TreeNode) => boolean;\n cancelRename: () => void;\n}\n\nconst treeNodeRenameContext = createContext<TreeNodeRenameContext | undefined>(undefined);\n\n/** @internal */\nexport const useTreeNodeRenameContext = () => {\n return useContext(treeNodeRenameContext);\n};\n\n/** @internal */\nexport function TreeNodeRenameContextProvider({ value, children }: PropsWithChildren<{ value: TreeNodeRenameContext }>) {\n return <treeNodeRenameContext.Provider value={value}>{children}</treeNodeRenameContext.Provider>;\n}\n\n/** @internal */\nexport function useTreeNodeRenameContextValue({ getEditingProps }: { getEditingProps?: (node: TreeNode) => TreeNodeEditingProps | undefined }) {\n const [renameParameters, setRenameParameters] = useState<RenameParameters | undefined>(undefined);\n\n const startRename = useCallback(\n (node: TreeNode) => {\n const { onLabelChanged, labelValidationHint, validate } = getEditingProps?.(node) ?? {};\n if (onLabelChanged) {\n setRenameParameters({\n nodeId: node.id,\n commit: (newLabel) => {\n onLabelChanged(newLabel);\n setRenameParameters(undefined);\n },\n labelValidationHint,\n validate,\n });\n }\n },\n [getEditingProps],\n );\n\n const cancelRename = useCallback(() => {\n setRenameParameters(undefined);\n }, []);\n\n const canRename = useCallback(\n (node: TreeNode) => {\n return getEditingProps?.(node)?.onLabelChanged !== undefined;\n },\n [getEditingProps],\n );\n\n return useMemo(\n () => ({\n renameParameters,\n cancelRename,\n startRename,\n canRename,\n }),\n [renameParameters, canRename, startRename, cancelRename],\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeNodeRenderer.d.ts","names":[],"sources":["../../../../src/presentation-hierarchies-react/stratakit/TreeNodeRenderer.tsx"],"mappings":";;;;;;;;KA6CY,sBAAA,GAAyB,IAAA,CACnC,wBAAA,QAAgC,IAAA,CAAK,IAAA;;;;;EAOrC,WAAA,GAAc,SAAA;AAAA"}
|