Data Table
Grouped Rows
Sort Data Table rows into categories, each under its own heading with a row count.
Preview
| Plugin | Version | Status |
|---|---|---|
| Content3 | ||
| Blog | 2.4.0 | Enabled |
| Wiki | 1.1.3 | Disabled |
| Docs | 3.0.1 | Enabled |
| Community2 | ||
| Forum | 5.2.0 | Enabled |
| Chat | 0.9.8 | Disabled |
| Commerce1 | ||
| Shop | 1.0.0 | Enabled |
Showing 1–6 of 6
Usage
When rows belong to a category, like plugins by type or tasks by project, pass
groupBy. Return the category's name from key, and the Data Table puts each
category's rows under a heading that shows its name and how many rows it holds.
<ContentDataTable
id="plugins-table"
groupBy={{ key: (plugin) => plugin.category }}
columns={columns}
edges={data.edges}
pageInfo={data.pageInfo}
order={{ defaultOrder: { column: 'name', order: 'asc' } }}
/>groupBy works with columns and with custom rows.
The AdminCP's AI → Actions page uses both: one card per action, grouped by
the plugin that registers it.
Change the heading
The heading shows the key by default. Pass label to render something
else, such as a translated name or an icon. The row count stays next to it.
groupBy={{
key: (action) => action.pluginId,
label: (group) => <span className="font-mono">{group.key}</span>,
}}How the groups are ordered
Groups appear in the order their first row does, and rows keep their order within a group. To get groups in a particular order, sort the rows by the category first, then by anything else. Ordering by category on the API is usually enough.
Grouping happens per page. If a category runs across two pages, its heading appears on both, with the count for that page.
When reorderable is set, the Data Table ignores groupBy. Dragging a row
across a heading would move it into another category, and only your data can
say whether that is allowed.
API
Prop
Type