diff --git a/src/DataGrid.tsx b/src/DataGrid.tsx index b8532c13fd..0fa9e1874c 100644 --- a/src/DataGrid.tsx +++ b/src/DataGrid.tsx @@ -55,6 +55,7 @@ import type { FillEvent, Maybe, Position, + PositionByKey, Renderers, RowsChangeData, SelectCellOptions, @@ -111,6 +112,7 @@ export interface DataGridHandle { element: HTMLDivElement | null; scrollToCell: (position: PartialPosition) => void; selectCell: (position: Position, options?: SelectCellOptions) => void; + selectCellByKey: (position: PositionByKey, options?: SelectCellOptions) => void; } type SharedDivProps = Pick< @@ -547,7 +549,8 @@ export function DataGrid(props: DataGridPr setScrollToPosition({ idx: scrollToIdx, rowIdx: scrollToRowIdx }); } }, - selectCell + selectCell, + selectCellByKey }) ); @@ -859,6 +862,14 @@ export function DataGrid(props: DataGridPr } } + function selectCellByKey(position: PositionByKey, options?: SelectCellOptions): void { + const columnIdx = columns.findIndex((col) => col.key === position.columnKey); + if (columnIdx === -1) { + throw new Error(`Column with key "${position.columnKey}" not found`); + } + selectCell({ idx: columnIdx, rowIdx: position.rowIdx }, options); + } + function selectHeaderCell({ idx, rowIdx }: Position): void { selectCell({ rowIdx: minRowIdx + rowIdx - 1, idx }); } diff --git a/src/types.ts b/src/types.ts index f635ed2d0e..29311660c4 100644 --- a/src/types.ts +++ b/src/types.ts @@ -120,6 +120,11 @@ export interface Position { readonly rowIdx: number; } +export interface PositionByKey { + readonly columnKey: string; + readonly rowIdx: number; +} + export interface RenderCellProps { column: CalculatedColumn; row: TRow;