AdaptTable for shadcn

Row reordering in shadcn

Compose rowReorder from @adapttable/shadcn/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 shadcn.

The grip wears the preset's button classes and the confirmation is the same overlay surface as every other menu on the table.

The code

import { DataTable } from "@adapttable/shadcn";
import { applyRowReorder } from "@adapttable/react";
import { rowReorder } from "@adapttable/shadcn/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/shadcn @adapttable/core

The same feature in the other kits

More shadcn features

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