AdaptTable for MUI

Aggregation in MUI

A summary row is not a pinned data row and not a group footer. summaryRow writes a grand total in the table footer. pinnedSummaryRows sticks host-owned totals above or below the scroll box. groupAggregates plus groupFooters close each group.

Filter the table and every total recomputes from the rows that remain — client aggregate() and a source that already computed the same numbers share one mapper shape. Extra full-width rows stay attached to a person, not to a total.

The footer, the pinned summaries and the group totals render through MUI's own table rows. Building and reordering group levels stays on the grouping page.

The footer is a real TableFooter, group totals sit in TableRows, and pinned summaries use the same sticky TableRow path as a pinned data row — the label tells them apart.

The code

import { aggregate } from "@adapttable/core";
import { DataTable } from "@adapttable/mui";
import { groupingPanel } from "@adapttable/mui/grouping-panel";
import { pinnedSummaryRows } from "@adapttable/mui/pinned-summary-rows";

export function Sales({ rows, columns }) {
  const budgetSum = aggregate({ budget: "sum" }, { columns });
  return (
    <DataTable
      data={rows}
      columns={columns}
      rowKey={(row) => row.id}
      summaryRow={budgetSum}
      features={[
        groupingPanel(["team"], {
          groupAggregates: budgetSum,
          groupFooters: true,
        }),
        pinnedSummaryRows({
          top: [{ id: "team-total", name: "Team total" }],
          bottom: [{ id: "grand-total", name: "Grand total" }],
        }),
      ]}
    />
  );
}

Install

pnpm add @adapttable/mui @adapttable/core @mui/material

The same feature in the other kits

More MUI features

Reference: row-grouping, pinned-summary-rows, full-width-rows. More of this kit: AdaptTable for MUI, or the live demo.