AdaptTable for Mantine

Tree data in Mantine

A tree grid is a different shape from a grouped table: the rows themselves nest, rather than being collected under synthetic headers. Compose tree() with getChildren or getParentId and it renders the hierarchy.

Children indent under their parent, a chevron opens and closes each branch, and arrow keys walk the tree the way a tree widget should. Expansion is part of the table's state, so it lives in the URL like everything else.

Sorting and filtering apply within the tree rather than flattening it. Moving a child under a new parent is a host callback on the row-reordering page — the table never rewrites your tree.

The branch toggle is a Mantine ActionIcon in the tree column, and the indent is drawn on the kit's own cell — so a nested row is still a Mantine table row.

The code

import { DataTable } from "@adapttable/mantine";
import { tree } from "@adapttable/mantine/tree";

export function Org({ people, columns }) {
  return (
    <DataTable
      data={people}
      columns={columns}
      rowKey={(row) => row.id}
      features={[
        tree({ getParentId: (row) => row.managerId, treeColumn: "name" }),
      ]}
      urlKey="org"
    />
  );
}

Install

pnpm add @adapttable/mantine @adapttable/core @mantine/core @mantine/hooks

The same feature in the other kits

More Mantine features

Reference: tree-data. More of this kit: AdaptTable for Mantine, or the live demo.