Skip to content

React table full-width and separator rows

Try it live: open a Mantine starter in StackBlitz — pass extraRows. Other UI kits →

See it working: the live demo — turn Extras on.

A separator is a thin rule. A full-width row is one cell that spans the table. Both are host-injected slots in the same kind-tagged list grouping already uses — omit extraRows and nothing is inserted.

import { DataTable } from "@adapttable/mantine";
<DataTable
data={rows}
columns={columns}
rowKey={(row) => row.id}
extraRows={[
{ key: "s", kind: "separator", beforeRowId: "2" },
{
key: "note",
kind: "fullWidth",
render: () => <em>Shipped Friday.</em>,
},
]}
/>;

beforeRowId is a data-row id. Omit it to append after the last data row. Several extras that share a target keep the host’s order. A named extra stays in front of that person through drag-reorder and pin — it is its own full-width row, with its own height, not folded into the person below. When a Team (or any) row span would paint through that extra, the extra sits on top of the spanned column so the note stays whole. The extra uses that person’s rowStyle fill (light and dark are whatever you passed) — AdaptTable does not pick a colour of its own.

extraRows={[
{
key: "note",
kind: "fullWidth",
beforeRowId: ada.id,
render: () => `Attached to ${ada.name} — drag or pin them and this extra comes along.`,
},
]}

The slots join the grouping entry list when grouping is on, so they window with the groups. On a flat or tree table they splice into the rendered body. Mobile cards keep the same slots: a rule between cards, or a full-width note.

Extras are content, not table state — nothing goes in the URL or a saved view.