From 7afa33f2d9e1893839d015ca5a8cdd914ac041f6 Mon Sep 17 00:00:00 2001 From: Marvin Bredal Lillehaug Date: Wed, 16 Nov 2016 09:45:40 +0100 Subject: [PATCH 1/2] Added rowSelection property --- react-data-grid/react-data-grid.d.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/react-data-grid/react-data-grid.d.ts b/react-data-grid/react-data-grid.d.ts index 0748270a57..20d5b72b6a 100644 --- a/react-data-grid/react-data-grid.d.ts +++ b/react-data-grid/react-data-grid.d.ts @@ -8,7 +8,10 @@ declare namespace AdazzleReactDataGrid { import React = __React; - + interface __SelectionParams { + rowIdx: number, + row: any + } interface GridProps { /** * Gets the data to render in each row. Required. @@ -173,6 +176,20 @@ declare namespace AdazzleReactDataGrid { * @default 0 */ rowScrollTimeout?: number + /** + * Options object for selecting rows + */ + rowSelection?: { + showCheckbox?: boolean + enableShiftSelect?: boolean + onRowsSelected?: (rows: Array<__SelectionParams>) => void, + onRowsDeselected?: (rows: Array<__SelectionParams>) => void, + selectBy?: { + indexes?: Array + keys: { rowKey: string, values: Array } + isSelectedKey: string + } + } } /** From 896d675b6d9dae75656e499a80ae733d904350bb Mon Sep 17 00:00:00 2001 From: Marvin Bredal Lillehaug Date: Wed, 16 Nov 2016 11:00:48 +0100 Subject: [PATCH 2/2] Updated tests for react-data-grid --- react-data-grid/react-data-grid-tests.tsx | 21 +++++++++++++++++++++ react-data-grid/react-data-grid.d.ts | 15 +++++++++------ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/react-data-grid/react-data-grid-tests.tsx b/react-data-grid/react-data-grid-tests.tsx index 1b95fa8cc7..1895e1781e 100644 --- a/react-data-grid/react-data-grid-tests.tsx +++ b/react-data-grid/react-data-grid-tests.tsx @@ -247,7 +247,19 @@ class Example extends React.Component { return this.state.rows.length; } + onRowsSelected(rows: Array) { + var selectedIndexes = this.state.selectedIndexes as Array; + + this.setState({selectedIndexes: selectedIndexes.concat(rows.map(r => r.rowIdx))}); + } + onRowsDeselected(rows: Array) { + var rowIndexes = rows.map(r => r.rowIdx); + var selectedIndexes = this.state.selectedIndexes as Array; + this.setState({selectedIndexes: selectedIndexes.filter(i => rowIndexes.indexOf(i) === -1 )}); + } + render() { + let selectedRows = ['id1', 'id2']; return ( { rowHeight={50} minHeight={600} rowScrollTimeout={200} + rowSelection={{ + showCheckbox: true, + enableShiftSelect: true, + onRowsSelected: this.onRowsSelected, + onRowsDeselected: this.onRowsDeselected, + selectBy: { + keys: {rowKey: 'id', values: selectedRows} + } + }} /> ); diff --git a/react-data-grid/react-data-grid.d.ts b/react-data-grid/react-data-grid.d.ts index 20d5b72b6a..0c512c9c70 100644 --- a/react-data-grid/react-data-grid.d.ts +++ b/react-data-grid/react-data-grid.d.ts @@ -8,10 +8,12 @@ declare namespace AdazzleReactDataGrid { import React = __React; - interface __SelectionParams { + + interface SelectionParams { rowIdx: number, row: any } + interface GridProps { /** * Gets the data to render in each row. Required. @@ -182,12 +184,12 @@ declare namespace AdazzleReactDataGrid { rowSelection?: { showCheckbox?: boolean enableShiftSelect?: boolean - onRowsSelected?: (rows: Array<__SelectionParams>) => void, - onRowsDeselected?: (rows: Array<__SelectionParams>) => void, + onRowsSelected?: (rows: Array) => void, + onRowsDeselected?: (rows: Array) => void, selectBy?: { - indexes?: Array - keys: { rowKey: string, values: Array } - isSelectedKey: string + indexes?: Array; + keys?: { rowKey: string, values: Array }; + isSelectedKey?: string; } } } @@ -413,6 +415,7 @@ declare namespace AdazzleReactDataGrid { // Various events export import RowUpdateEvent = AdazzleReactDataGrid.RowUpdateEvent; + export import SelectionParams = AdazzleReactDataGrid.SelectionParams; export import CellDragEvent = AdazzleReactDataGrid.CellDragEvent; export import DragHandleDoubleClickEvent = AdazzleReactDataGrid.DragHandleDoubleClickEvent; export import CellCopyPasteEvent = AdazzleReactDataGrid.CellCopyPasteEvent;