Skip to content

RowReorderPlugin

Row Drag-Drop Plugin for <tbw-grid>.

OptionTypeDescription
enableKeyboard?booleanEnable keyboard shortcuts (Ctrl + ↑ / Ctrl + ↓) for moving rows. Keyboard moves are intra-grid only.
showDragHandle?booleanShow a drag handle column.
dragFrom?row | handle | bothWhere on a row a drag can be initiated.
dragHandlePosition?left | rightPosition of the drag handle column.
dragHandleWidth?numberWidth of the drag handle column in pixels.
debounceMs?numberDebounce time in milliseconds for rapid keyboard moves. Events are batched and emitted after this delay.
animation?false | flipAnimation type for row movement. - false: instant reorder - 'flip': FLIP animation (slides rows smoothly)
canDrag?(row: T, index: number) => booleanValidation callback invoked once at dragstart (and on intra-grid keyboard moves) to decide whether a row can be picked up. Replaces RowReorderConfig.canMove for the dragstart side.
canMove?(row: T, fromIndex: number, toIndex: number, direction: up | down) => boolean
dropZone?stringShared zone identifier. Two grids that opt into the same zone may exchange rows. Omit to behave exactly like the legacy RowReorderPlugin — intra-grid only, no cross-grid affordances.
operation?copy | moveCross-grid drop semantics. - 'move' (default): the row is removed from the source grid’s _rows and inserted into the target. - 'copy': the source _rows is unchanged; the target inserts a copy.
canDrop?(payload: RowDragPayload<T>, targetIndex: number) => booleanValidation callback invoked during dragover (same-window) and at drop time to decide whether a drop should be accepted at targetIndex.
serializeRow?(row: T) => unknownOptional row transformer applied when a row leaves this grid in a cross-window / cross-iframe drag (i.e. when the WeakRef live-reference path cannot be used). Use to strip internal IDs or rename fields before the row crosses a security boundary.
deserializeRow?(raw: unknown) => TOptional row transformer applied when a row lands in this grid via a cross-window / cross-iframe drag. Use to assign new IDs or remap fields.
autoScroll?boolean | objectAuto-scroll the target grid when the cursor approaches its viewport top or bottom edge during drag.

Intra-grid (parity with deprecated RowReorderPlugin)

Section titled “Intra-grid (parity with deprecated RowReorderPlugin)”
import { RowDragDropPlugin } from '@toolbox-web/grid/plugins/row-drag-drop';
grid.gridConfig = {
plugins: [new RowDragDropPlugin()],
};
gridA.gridConfig = { plugins: [new RowDragDropPlugin({ dropZone: 'tasks' })] };
gridB.gridConfig = { plugins: [new RowDragDropPlugin({ dropZone: 'tasks' })] };
gridA.addEventListener('row-transfer', (e) => persist(e.detail));
gridB.addEventListener('row-transfer', (e) => persist(e.detail));

Extends BaseGridPlugin

Inherited methods like attach(), detach(), afterRender(), etc. are documented in the base class.

Move a row to a new position programmatically (intra-grid).

moveRow(fromIndex: number, toIndex: number): void
NameTypeDescription
fromIndexnumber
toIndexnumber

Check if a row can be moved within this grid. Consults the user-provided canMove callback (or canDrag veto for the source row), the plugin query system (canMoveRow), and canDrop for the target.

canMoveRow(fromIndex: number, toIndex: number): boolean
NameTypeDescription
fromIndexnumber
toIndexnumber

AI assistants: For complete API documentation, implementation guides, and code examples for this library, see https://raw.githubusercontent.com/OysteinAmundsen/toolbox/main/llms-full.txt