Row Order
Module Extensions
Section titled “Module Extensions”HTMLRevoGridElement (Extended from @revolist/revogrid)
Section titled “HTMLRevoGridElement (Extended from @revolist/revogrid)”interface HTMLRevoGridElement { /** * Direct row-order configuration. */ rowOrder?: RowOrderPluginConfig}AdditionalData (Extended from @revolist/revogrid)
Section titled “AdditionalData (Extended from @revolist/revogrid)”interface AdditionalData { /** * Additional data property rowOrder * @deprecated Use `grid.rowOrder` instead. * * @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)
Section titled “ColumnRegular (Extended from @revolist/revogrid)”interface ColumnRegular { /** * Column prop, used for drag and drop text information */ rowDrag?: RowDrag<TModel>}HTMLRevoGridElementEventMap (Extended from global)
Section titled “HTMLRevoGridElementEventMap (Extended from global)”interface HTMLRevoGridElementEventMap { [ORDER_CHANGED_EVENT]: RowOrderChange; [DRAG_START_EVENT]: RowDragStartEvent; [BEFORE_ROW_DROP_VALIDATE_EVENT]: RowOrderDropValidationEvent; [ROW_DROP_STATE_CHANGE_EVENT]: RowOrderDropStateChange}Plugin API
Section titled “Plugin API”RowOrderPlugin
Section titled “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.
- Cell Flash Integration: When
CellFlashPluginis installed, successfully moved rows flash at their new visible positions after the reorder is committed. - 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
RowOrderPlugininto a RevoGrid instance to enable advanced row reordering capabilities. - Customize behavior and appearance through configuration options and event listeners.
Example
Section titled “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();}RowOrderChangedDetail
Section titled “RowOrderChangedDetail”export type RowOrderChangedDetail = { from: number; targetRow?: number; to: number; type: DimensionRows;};RowDragStartEvent (Extended from index.ts)
Section titled “RowDragStartEvent (Extended from index.ts)”interface RowDragStartEvent { model: CellTemplateProp}RowOrderDropValidationResult
Section titled “RowOrderDropValidationResult”export type RowOrderDropValidationResult = | { valid: true; warning?: string } | { valid: false; reason?: string };RowOrderPreviewContext
Section titled “RowOrderPreviewContext”export type RowOrderPreviewContext = { dataItem: CellTemplateProp; firstItem?: DataType; itemCount: number; items: DataType[]; prop?: ColumnProp; type: DimensionRows;};RowOrderPreviewContent
Section titled “RowOrderPreviewContent”export type RowOrderPreviewContent = string | number | HTMLElement | undefined;RowOrderPreviewRenderer
Section titled “RowOrderPreviewRenderer”export type RowOrderPreviewRenderer = ( context: RowOrderPreviewContext,) => RowOrderPreviewContent;RowOrderDropValidationContext
Section titled “RowOrderDropValidationContext”export type RowOrderDropValidationContext = { dataItem: CellTemplateProp; dropPosition: RowOrderDropPosition; from: number; items: Map<number, DataType>; originalEvent: MouseEvent; targetIndex: number; targetRow: number; to: number; type: DimensionRows; /** * Visible row indexes that are part of the active drag selection. */ visibleRowIndexes?: number[];};RowOrderDropValidationEvent (Extended from index.ts)
Section titled “RowOrderDropValidationEvent (Extended from index.ts)”export type RowOrderDropValidationEvent = RowOrderDropValidationContext & { result: RowOrderDropValidationResult;};RowOrderDropStateChange (Extended from index.ts)
Section titled “RowOrderDropStateChange (Extended from index.ts)”export type RowOrderDropStateChange = RowOrderDropValidationContext & { previous?: RowOrderDropValidationResult; result: RowOrderDropValidationResult;};RowOrderDropPosition
Section titled “RowOrderDropPosition”export type RowOrderDropPosition = 'before' | 'inside' | 'after';RowOrderPluginConfig
Section titled “RowOrderPluginConfig”interface RowOrderPluginConfig { prop?: ColumnProp; // column prop, used for drag and drop text information preview?: 'compact' | 'none' | RowOrderPreviewRenderer; previewProp?: ColumnProp | RowOrderPreviewRenderer; validateDrop?: ( context: RowOrderDropValidationContext, ) => RowOrderDropValidationResult | boolean | void; allowPinnedRows?: boolean; allowCrossRowType?: boolean; /** * Flashes moved rows after a successful reorder when `CellFlashPlugin` is * installed. Enabled by default. Set to `false` to keep `CellFlashPlugin` * active for other grid changes without flashing row-order drops. */ flashOnDrop?: boolean; /** * When grouped rows are reordered into another group, apply the target group * values to the moved rows and emit regular beforeedit/afteredit events. * Disabled by default, so grouped rows can only be reordered inside the same * group path. */ applyTargetGroupOnDrop?: boolean}RowOrderServiceConfig
Section titled “RowOrderServiceConfig”interface RowOrderServiceConfig { dimension: PluginProviders['dimension']; orderStart(e: MouseEvent): void; positionChanged(e: MouseEvent, detail: RowOrderChangedDetail): void}DragEventsData (Extended from index.ts)
Section titled “DragEventsData (Extended from index.ts)”interface DragEventsData { text?: string | number}RowOrderChange (Extended from index.ts)
Section titled “RowOrderChange (Extended from index.ts)”interface RowOrderChange { // ; // models dropPosition?: RowOrderDropPosition; originalEvent: MouseEvent; /** * Visible row index that the pointer resolved to before row-order target-index * normalization. Tree integrations use it to resolve the insertion boundary * against the current hierarchy. */ targetRow?: number; /** * Visible row indexes that are part of the active drag selection. */ visibleRowIndexes?: number[]}LocalSubscription
Section titled “LocalSubscription”export type LocalSubscription = { target: Element | Document; callback(...params: any[]): void;};StaticData
Section titled “StaticData”export type StaticData = { dataItem: CellTemplateProp; dataEl: HTMLElement; scrollEl: Element; gridEl: HTMLElement; items: Map<number, DataType>;};draggableRender
Section titled “draggableRender”export function draggableRender( h: HyperFunc<VNode>, data: DragEventsData, _?: any);OrderHandler
Section titled “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;
setValidation(validation: RowOrderDropValidationResult): void;
render(h: HyperFunc<VNode>, pluginId: string);}getTopRelative
Section titled “getTopRelative”Get coordinate relative to the grid
export function getTopRelative( absoluteY: number,;getRow
Section titled “getRow”Calculate cell based on x, y position
export function getRow(y: number, e: EventData): PositionItem;getCell
Section titled “getCell”Calculate cell based on x, y position
export function getCell(;EventData
Section titled “EventData”export type EventData = { el: HTMLElement; elScroll: Element; elRect: DOMRect; gridRect: DOMRect; yOffset: number; dataItem: DragEventsData; type: DimensionRows; rows: DimensionSettingsState; cols: DimensionSettingsState;};default
Section titled “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;}resolveRowDrag
Section titled “resolveRowDrag”export function resolveRowDrag( rowDrag: RowDrag | undefined, model: CellTemplateProp,): boolean;normalizeDropRow
Section titled “normalizeDropRow”export function normalizeDropRow(from: number, hoverRow: number): number;getTargetIndex
Section titled “getTargetIndex”export function getTargetIndex( from: number, to: number, itemCount: number,): number;isNoopDrop
Section titled “isNoopDrop”export function isNoopDrop( range: RowOrderRange, targetIndex: number, rowIndexes?: RowOrderVisibleRowIndex[],): boolean;normalizeRowOrderIndexes
Section titled “normalizeRowOrderIndexes”export function normalizeRowOrderIndexes( rowIndexes: RowOrderVisibleRowIndex[], itemCount: number,): RowOrderVisibleRowIndex[];rangeToRowOrderIndexes
Section titled “rangeToRowOrderIndexes”export function rangeToRowOrderIndexes( range: RowOrderRange,): RowOrderVisibleRowIndex[];getRowOrderSelectionRange
Section titled “getRowOrderSelectionRange”export function getRowOrderSelectionRange( rowIndexes: RowOrderVisibleRowIndex[],): RowOrderRange;getRowOrderTargetIndex
Section titled “getRowOrderTargetIndex”export function getRowOrderTargetIndex(;resolveRowOrderEditColumn
Section titled “resolveRowOrderEditColumn”export function resolveRowOrderEditColumn( columns: ColumnRegular[], prop: ColumnProp,): RowOrderEditColumnResolution;buildRowOrderMutation
Section titled “buildRowOrderMutation”export function buildRowOrderMutation(;normalizeValidationResult
Section titled “normalizeValidationResult”export function normalizeValidationResult( result: RowOrderDropValidationResult | boolean | void,): RowOrderDropValidationResult;buildPreviewContext
Section titled “buildPreviewContext”export function buildPreviewContext(;resolvePreviewContent
Section titled “resolvePreviewContent”export function resolvePreviewContent(;buildDropValidationContext
Section titled “buildDropValidationContext”export function buildDropValidationContext(;getRowDimensionState
Section titled “getRowDimensionState”export function getRowDimensionState( stores: RowDimensionStateStores, type: DimensionRows,): DimensionSettingsState;resolveGroupedDrop
Section titled “resolveGroupedDrop”export function resolveGroupedDrop(;RowOrderRange
Section titled “RowOrderRange”export type RowOrderRange = { from: number; to: number;};RowOrderVisibleRowIndex
Section titled “RowOrderVisibleRowIndex”export type RowOrderVisibleRowIndex = number;RowOrderMutation
Section titled “RowOrderMutation”export type RowOrderMutation = { targetIndex: number; itemsOrder: number[]; prevItems: number[]; proxyItems: number[];};RowDimensionStateStores
Section titled “RowDimensionStateStores”export type RowDimensionStateStores = Record<DimensionRows, { getCurrentState(): DimensionSettingsState;}>;GroupedDropEdit
Section titled “GroupedDropEdit”export type GroupedDropEdit = { physicalIndex: number; prop: ColumnProp; value: unknown;};GroupedDropResolution
Section titled “GroupedDropResolution”export type GroupedDropResolution = | { valid: true; edits: GroupedDropEdit[]; targetValues?: Record<string, unknown> } | { valid: false; reason: string };GroupedDropOptions
Section titled “GroupedDropOptions”export type GroupedDropOptions = { groupProps: ColumnProp[]; items: number[]; movedItems: Map<number, DataType>; source: DataType[]; targetIndex: number; applyTargetGroupOnDrop?: boolean; isGroupingRow(model?: DataType): boolean; getGroupPath(model: DataType): unknown[] | null;};RowOrderEditColumnResolution
Section titled “RowOrderEditColumnResolution”export type RowOrderEditColumnResolution = { column: ColumnRegular; index: number;};