useGetTree
This Enterprise Edition hook is exposed by the
ra-tree module, a package dedicated to handling tree structures. Itβs ideal for fetching a tree structure from the API, e.g. a list of categories.
It calls dataProvider.getTree() (one of the new dataProvider methods supported by ra-tree) when the component mounts, and returns the tree nodes in a flat array.
Usage
Use it like other dataProvider hooks:
import { useGetTree, getRCTree, Tree } from '@react-admin/ra-tree';
const Categories = () => {
const { data, isLoading, error } = useGetTree('categories');
if (isLoading) { return <Loading />; }
if (error) { return <p>ERROR</p>; }
return <Tree treeData={getRCTree(data)} />;
};
data will contain an array of TreeRecord objects. A TreeRecord contains at least an id field and a children field (an array of child ids). For instance:
[
{ id: 1, title: 'foo1', children: [3, 4] },
{ id: 2, title: 'foo2', children: [] },
{ id: 3, title: 'foo3', children: [5] },
{ id: 4, title: 'foo4', children: [] },
{ id: 5, title: 'foo5', children: [] },
]
The <Tree> component is a wrapper for rc-treeβs <Tree>, with Material Design style. It expects a treeData prop containing a tree of nodes with a special format (hence the getRCTree converter).
Other Tree Hooks
useGetTree is one of many hooks added by ra-tree. This package recommends adding several methods to the dataProvider, and has one hook for each method.
Read methods
getTree(resource)getRootNodes(resource)getParentNode(resource, { childId })getChildNodes(resource, { parentId })
These methods return Promises for TreeRecord objects.
Write methods
moveAsNthChildOf(resource, { source, destination, position, meta }):sourceanddestinationareTreeRecordobjects, andpositiona zero-based integermoveAsNthSiblingOf(resource, { source, destination, position, meta })addRootNode(resource, { data, meta })addChildNode(resource, { parentId, data, position, meta })deleteBranch(resource, { id, data, meta }):idis the identifier of the node to remove, anddataits content
Check the ra-tree documentation for more details.
