Skip to content

Row Order

Module Extensions

AdditionalData (Extended from @revolist/revogrid)

interface AdditionalData {
/**
* Additional data property rowOrder
*
* @example
* ```typescript
* const grid = document.createElement('revo-grid');
* grid.plugins = [RowOrderPlugin];
* grid.additionalData = {
* rowOrder: {
* prop: 'name', // column prop, used for drag and drop text information
* },
* };
* ```
*/
rowOrder?: RowOrderPluginConfig
}

ColumnRegular (Extended from @revolist/revogrid)

interface ColumnRegular {
/**
* Column prop, used for drag and drop text information
*/
rowDrag?: RowDrag
}

HTMLRevoGridElementEventMap (Extended from global)

interface HTMLRevoGridElementEventMap {
[ORDER_CHANGED_EVENT]: RowOrderChange;
[DRAG_START_EVENT]: RowDragStartEvent
}

Plugin API

RowOrderPlugin

The RowOrderPlugin is a sophisticated plugin for the RevoGrid framework, providing users with the ability to reorder rows through an intuitive drag-and-drop interface. This plugin enhances user interactivity by allowing smooth row rearrangement while maintaining data integrity and grid performance.

Key Features:

  • Row Drag and Drop: Users can drag one or multiple rows and reposition them within the grid.
  • Auto-scroll Support: Automatically scrolls the grid, viewport, or container when rows are dragged near the edges, ensuring a seamless drag-and-drop experience.
  • Row Highlighting: Highlights rows that are being dragged or trimmed, providing visual feedback.
  • Multiple Row Handling: Supports dragging and selecting multiple rows, enhancing batch operations.
  • Event Integration: Listens to and dispatches various drag-related events, such as DRAG_START_EVENT, DRAG_END_EVENT, ORDER_CHANGED_EVENT, and more, allowing for extensive customization and integration with other components.
  • Trimmed Row Management: Manages trimmed rows by automatically clearing and updating them as necessary during drag operations.

Usage:

  • Integrate RowOrderPlugin into a RevoGrid instance to enable advanced row reordering capabilities.
  • Customize behavior and appearance through configuration options and event listeners.

Example

import { RowOrderPlugin } from '@revolist/revogrid-pro'
const grid = document.createElement('revo-grid');
grid.plugins = [RowOrderPlugin];

This plugin is ideal for applications requiring dynamic, user-driven row management, such as task prioritization tools, data manipulation applications, or any scenario where row order is significant.

class RowOrderPlugin {
/**
* Drop trigger event
*/
onMouseOut(_: MouseEvent): void;
/**
* Final event
*/
onMouseUp(e: MouseEvent): void;
/**
* Initial event when drag begins
*/
dragStart(;
/**
* Initial row move
*/
move(e: MouseEvent);
clearOrder(): void;
/**
* Start grid reordering
*/
orderStart(e: MouseEvent): void;
/**
* Clearing local subscription
*/
clearSubscriptions();
clearHighlight();
}

draggableRender

export function draggableRender(
h: HyperFunc<VNode>,
data: DragEventsData,
_?: any
);

OrderHandler

class OrderHandler {
renderAutoscroll(_: MouseEvent, parent: HTMLElement | null): void;
autoscroll(y: number, dataContainerHeight: number): void;
start(e: MouseEvent,;
stop(): void;
moveTip(;
showHandler(y: number, gridHeight: number): void;
render(h: HyperFunc<VNode>, pluginId: string);
}

getTopRelative

Get coordinate relative to the grid

export function getTopRelative(
absoluteY: number,;

getRow

Calculate cell based on x, y position

export function getRow(y: number, e: EventData): PositionItem;

getCell

Calculate cell based on x, y position

export function getCell(;

EventData

export type EventData = {
el: HTMLElement;
elScroll: Element;
elRect: DOMRect;
gridRect: DOMRect;
yOffset: number;
dataItem: DragEventsData;
type: DimensionRows;
rows: DimensionSettingsState;
cols: DimensionSettingsState;
};

default

class RowOrderService {
/** Drag finished, calculate and apply changes */
endOrder(e: MouseEvent, data: EventData): void;
start(e: MouseEvent): void;
/** Drag started, reserve initial cell for farther use */
startOrder(cell: Cell);
move(e: MouseEvent, data: EventData): PositionItem | null;
/** Drag stopped, probably cursor outside of document area */
clear(): void;
}

RowOrderChangedDetail

export type RowOrderChangedDetail = {
from: number;
to: number;
type: DimensionRows;
};

RowDragStartEvent (Extended from row-order.types.ts)

interface RowDragStartEvent {
model: CellTemplateProp
}

RowOrderPluginConfig

interface RowOrderPluginConfig {
prop?: ColumnProp
}

RowOrderServiceConfig

interface RowOrderServiceConfig {
dimension: PluginProviders['dimension'];
orderStart(e: MouseEvent): void;
positionChanged(e: MouseEvent, detail: RowOrderChangedDetail): void
}

DragEventsData (Extended from row-order.types.ts)

interface DragEventsData {
text?: string | number
}

RowOrderChange (Extended from row-order.types.ts)

interface RowOrderChange {
// ; // models
originalEvent: MouseEvent
}

LocalSubscription

export type LocalSubscription = {
target: Element | Document;
callback(...params: any[]): void;
};

StaticData

export type StaticData = {
dataItem: CellTemplateProp;
dataEl: HTMLElement;
scrollEl: Element;
gridEl: HTMLElement;
items: Map<number, DataType>;
};