AdaptTable for Mantine

Nested tables in Mantine

Open a row and the panel holds another Mantine table — the same component, not a hand-built list. Each person has recent orders; the inner table has its own columns and row keys.

nestedTable mounts the kit's DataTable with defaults that keep the two tables from fighting over the URL. Rows with no nested table can still use renderRowDetail.

The expand chevron and both tables are Mantine.

The chevron is a Mantine ActionIcon; the inner table is another Mantine DataTable, so the nested orders sort and page with Mantine controls rather than a list in a blank panel.

The code

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

export function People({ rows, columns, orderColumns }) {
  return (
    <DataTable
      data={rows}
      columns={columns}
      rowKey={(row) => row.id}
      nestedTable={(row) => ({
        label: `Orders for ${row.name}`,
        table: (defaults) => (
          <DataTable
            {...defaults}
            data={row.orders}
            columns={orderColumns}
            rowKey={(order) => order.id}
          />
        ),
      })}
    />
  );
}

Install

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

The same feature in the other kits

More Mantine features

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