28 lines
607 B
TypeScript
Executable File
28 lines
607 B
TypeScript
Executable File
import {TreeItemRenderer} from './tree-item';
|
|
import {cloneElement} from 'react';
|
|
import {TreeNode} from './tree';
|
|
|
|
interface RenderTreeProps<T extends TreeNode> {
|
|
nodes: T[];
|
|
parentNode?: T;
|
|
itemRenderer: TreeItemRenderer<T>;
|
|
level?: number;
|
|
}
|
|
export function renderTree<T extends TreeNode>({
|
|
nodes,
|
|
itemRenderer,
|
|
parentNode,
|
|
level,
|
|
}: RenderTreeProps<T>) {
|
|
return nodes.map((node, index) => {
|
|
return cloneElement(itemRenderer(node), {
|
|
level: level == undefined ? 0 : level + 1,
|
|
index,
|
|
node,
|
|
parentNode,
|
|
key: node.id,
|
|
itemRenderer,
|
|
});
|
|
});
|
|
}
|