AdaptTable for MUI

Row reordering in MUI

Compose rowReorder from @adapttable/mui/row-reorder and a grip appears. Space lifts a row, arrows move it, Space drops it. The table never mutates your array: onRowReorder asks the host, and the host writes.

movePolicy: "confirm" opens the kit's own move menu before a drop lands. Grouped moves stay inside a group unless onGroupMove says otherwise; tree moves stay under the same parent unless onTreeMove accepts a new one. A second move cannot start while a host confirmation is still pending.

Row identity is the row key, not the visual index — a virtual window or a later page does not lie about where the row sat. The grip, the move buttons and the confirmation menu are MUI.

The grip is an IconButton and the confirmation is a MUI Menu of MenuItems, so a keyboard drop lands in the same overlay pattern as the row-action menu.

The code

import { DataTable } from "@adapttable/mui";
import { applyRowReorder } from "@adapttable/react";
import { rowReorder } from "@adapttable/mui/row-reorder";

export function Tasks({ rows, setRows, columns }) {
  return (
    <DataTable
      data={rows}
      columns={columns}
      rowKey={(row) => row.id}
      features={[
        rowReorder((from, to) => {
          setRows((current) => applyRowReorder(current, from, to));
        }, { movePolicy: "confirm" }),
      ]}
    />
  );
}

Install

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

The same feature in the other kits

More MUI features

Reference: row-reordering. More of this kit: AdaptTable for MUI, or the live demo.