Skip to content

Commit 590cafa

Browse files
nstepienamanmahajan7
authored andcommitted
Replace rowGetter and rowsCount with rows[] (#1869)
* Replace rowGetter and rowsCount with rows * Update readme * post-merge fix
1 parent 354a2d8 commit 590cafa

18 files changed

+75
-133
lines changed

README.md

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,11 @@ const rows = [
2929
{ id: 1, title: 'Demo' }
3030
];
3131

32-
const rowGetter = rowIndex => rows[rowIndex];
33-
3432
function App() {
3533
return (
3634
<DataGrid
3735
columns={columns}
38-
rowGetter={rowGetter}
39-
rowsCount={rows.length}
36+
rows={rows}
4037
minHeight={500}
4138
/>
4239
);

examples/demos/example01-basic.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@ export default function() {
2525
<Wrapper title="Basic Example">
2626
<DataGrid<Row, 'id'>
2727
columns={columns}
28-
rowGetter={i => rows[i]}
29-
rowsCount={3}
28+
rows={rows}
3029
minHeight={150}
3130
/>
3231
</Wrapper>

examples/demos/example03-frozen-cols.tsx

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useMemo, useCallback } from 'react';
1+
import React, { useMemo } from 'react';
22
import { AutoSizer } from 'react-virtualized';
33
import DataGrid, { Column } from '../../src';
44
import Wrapper from './Wrapper';
@@ -83,19 +83,14 @@ export default function FrozenCols() {
8383
return [columns, rows];
8484
}, []);
8585

86-
const rowGetter = useCallback((i: number): Row => {
87-
return rows[i];
88-
}, [rows]);
89-
9086
return (
9187
<Wrapper title="Frozen Columns Example">
9288
<div className="grid-autosizer-wrapper">
9389
<AutoSizer>
9490
{({ height, width }) => (
9591
<DataGrid<Row, 'id'>
9692
columns={columns}
97-
rowGetter={rowGetter}
98-
rowsCount={rows.length}
93+
rows={rows}
9994
minHeight={height}
10095
minWidth={width}
10196
headerRowHeight={27}

examples/demos/example13-all-features.tsx

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -189,12 +189,6 @@ export default function AllFeaturesExample(): JSX.Element {
189189

190190
const handleAddRow = useCallback(({ newRowIndex }: { newRowIndex: number }): void => setRows([...rows, createFakeRowObjectData(newRowIndex)]), [rows]);
191191

192-
const getRowAt = useCallback((index: number): Row => rows[index], [rows]);
193-
194-
const getSize = useCallback((): number => rows.length, [rows.length]);
195-
196-
const onSelectedRowsChange = useCallback((newSelectedRows: Set<string>): void => setSelectedRows(newSelectedRows), []);
197-
198192
return (
199193
<Wrapper title="All the features grid">
200194
<>
@@ -206,14 +200,13 @@ export default function AllFeaturesExample(): JSX.Element {
206200
ref={gridRef}
207201
enableCellSelect
208202
columns={columns}
209-
rowGetter={getRowAt}
210-
rowsCount={getSize()}
203+
rows={rows}
211204
onGridRowsUpdated={handleGridRowsUpdated}
212205
rowHeight={30}
213206
minWidth={width}
214207
minHeight={height}
215208
selectedRows={selectedRows}
216-
onSelectedRowsChange={onSelectedRowsChange}
209+
onSelectedRowsChange={setSelectedRows}
217210
enableCellCopyPaste
218211
enableCellDragAndDrop
219212
/>

examples/demos/example25-tree-view.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,7 @@ export default function() {
158158
<DataGrid<Row, 'id'>
159159
enableCellSelect
160160
columns={columns}
161-
rowGetter={i => rows[i]}
162-
rowsCount={rows.length}
161+
rows={rows}
163162
minHeight={500}
164163
/>
165164
</>

examples/demos/example27-cell-actions.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,7 @@ export default function() {
154154
<DataGrid<Row, 'id'>
155155
enableCellSelect
156156
columns={columns}
157-
rowGetter={i => rows[i]}
158-
rowsCount={rows.length}
157+
rows={rows}
159158
rowHeight={55}
160159
minHeight={600}
161160
/>

src/Canvas.test.tsx

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ const testProps: CanvasProps<Row, 'id'> = {
1919
rowKey: 'id',
2020
rowHeight: 25,
2121
height: 200,
22-
rowsCount: 1,
23-
rowGetter(id) { return { id, row: String(id) }; },
22+
rows: [{ id: 0, row: '0' }],
2423
onGridRowsUpdated: noop,
2524
enableCellSelect: true,
2625
enableCellAutoFocus: false,
@@ -65,16 +64,14 @@ describe('Canvas', () => {
6564
const wrapper = renderComponent();
6665

6766
expect(wrapper.find(InteractionMasks).props()).toMatchObject({
68-
rowHeight: 25,
69-
rowsCount: 1
67+
rowHeight: 25
7068
});
7169
});
7270

7371
describe('Row Selection', () => {
7472
it('renders row selected', () => {
7573
const wrapper = renderComponent({
76-
rowGetter(id) { return { id, row: 'one' }; },
77-
rowsCount: 1,
74+
rows: [{ id: 0, row: 'one' }],
7875
rowKey: 'id',
7976
selectedRows: new Set([0])
8077
});
@@ -98,9 +95,9 @@ describe('Canvas', () => {
9895
return <div key={rowIdx} className="test-row-renderer" />;
9996
};
10097

101-
const rowGetter = (id: number) => ({
102-
id,
103-
row: String(id),
98+
const rows = [{
99+
id: 0,
100+
row: '0',
104101
__metaData: {
105102
isGroup: false,
106103
treeDepth: 0,
@@ -109,17 +106,12 @@ describe('Canvas', () => {
109106
columnGroupDisplayName: 'ColGroup',
110107
getRowRenderer: EmptyChildRow
111108
}
112-
});
113-
114-
const props = {
115-
rowOverscanStartIdx: 0,
116-
rowOverscanEndIdx: 1,
117-
columns: COLUMNS,
118-
rowGetter,
119-
rowsCount: 1
120-
};
109+
}];
121110

122-
const wrapper = renderComponent(props);
111+
const wrapper = renderComponent({
112+
viewportColumns: COLUMNS,
113+
rows
114+
});
123115
expect(wrapper.find('.test-row-renderer')).toHaveLength(1);
124116
});
125117
});

src/Canvas.tsx

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ import SummaryRowRenderer from './SummaryRowRenderer';
1010
import { getColumnScrollPosition, getScrollbarSize, isPositionStickySupported, getVerticalRangeToRender } from './utils';
1111

1212
type SharedDataGridProps<R, K extends keyof R> = Pick<DataGridProps<R, K>,
13-
| 'rowGetter'
14-
| 'rowsCount'
13+
| 'rows'
1514
| 'rowRenderer'
1615
| 'rowGroupRenderer'
1716
| 'contextMenu'
@@ -63,11 +62,10 @@ function Canvas<R, K extends keyof R>({
6362
scrollLeft,
6463
onScroll,
6564
renderBatchSize,
66-
rowGetter,
65+
rows,
6766
rowHeight,
6867
rowKey,
6968
RowsContainer,
70-
rowsCount,
7169
summaryRows,
7270
selectedRows,
7371
onSelectedRowsChange,
@@ -87,7 +85,7 @@ function Canvas<R, K extends keyof R>({
8785
clientHeight,
8886
rowHeight,
8987
scrollTop,
90-
rowsCount,
88+
rows.length,
9189
renderBatchSize
9290
);
9391

@@ -161,7 +159,7 @@ function Canvas<R, K extends keyof R>({
161159

162160
const handleRowSelectionChange = ({ rowIdx, checked, isShiftClick }: SelectRowEvent) => {
163161
const newSelectedRows = new Set(selectedRows);
164-
const rowId = rowGetter(rowIdx)[rowKey];
162+
const rowId = rows[rowIdx][rowKey];
165163

166164
if (checked) {
167165
newSelectedRows.add(rowId);
@@ -170,7 +168,7 @@ function Canvas<R, K extends keyof R>({
170168
if (isShiftClick && previousRowIdx !== -1 && previousRowIdx !== rowIdx) {
171169
const step = Math.sign(rowIdx - previousRowIdx);
172170
for (let i = previousRowIdx + step; i !== rowIdx; i += step) {
173-
newSelectedRows.add(rowGetter(i)[rowKey]);
171+
newSelectedRows.add(rows[i][rowKey]);
174172
}
175173
}
176174
} else {
@@ -182,7 +180,7 @@ function Canvas<R, K extends keyof R>({
182180
};
183181

184182
return eventBus.subscribe(EventTypes.SELECT_ROW, handleRowSelectionChange);
185-
}, [eventBus, onSelectedRowsChange, rowGetter, rowKey, selectedRows]);
183+
}, [eventBus, onSelectedRowsChange, rows, rowKey, selectedRows]);
186184

187185
useImperativeHandle(ref, () => ({
188186
scrollToColumn,
@@ -194,7 +192,7 @@ function Canvas<R, K extends keyof R>({
194192
function getViewportRows() {
195193
const rowElements = [];
196194
for (let idx = rowOverscanStartIdx; idx <= rowOverscanEndIdx; idx++) {
197-
const rowData = rowGetter(idx);
195+
const rowData = rows[idx];
198196
rowElements.push(
199197
<RowRenderer<R, K>
200198
key={idx}
@@ -226,7 +224,7 @@ function Canvas<R, K extends keyof R>({
226224
style={{
227225
width: columnMetrics.totalColumnWidth,
228226
paddingTop: rowOverscanStartIdx * rowHeight,
229-
paddingBottom: (rowsCount - 1 - rowOverscanEndIdx) * rowHeight
227+
paddingBottom: (rows.length - 1 - rowOverscanEndIdx) * rowHeight
230228
}}
231229
>
232230
{getViewportRows()}
@@ -265,8 +263,7 @@ function Canvas<R, K extends keyof R>({
265263
onKeyUp={props.onCanvasKeyup}
266264
>
267265
<InteractionMasks<R, K>
268-
rowGetter={rowGetter}
269-
rowsCount={rowsCount}
266+
rows={rows}
270267
rowHeight={rowHeight}
271268
columns={columns}
272269
height={clientHeight}

src/Cell.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ describe('Cell', () => {
6767
idx: 19,
6868
column: helpers.columns[0],
6969
lastFrozenColumnIndex: -1,
70-
rowData: helpers.rowGetter(11),
70+
rowData: helpers.rows[11],
7171
isRowSelected: false,
7272
scrollLeft: 0,
7373
isSummaryRow: false,

src/DataGrid.tsx

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import {
2121
Position,
2222
RowsContainerProps,
2323
RowExpandToggleEvent,
24-
RowGetter,
2524
SelectedRange,
2625
IRowRendererProps,
2726
ScrollPosition,
@@ -81,9 +80,7 @@ export interface DataGridProps<R, K extends keyof R> {
8180
rowRenderer?: React.ComponentType<IRowRendererProps<R>>;
8281
rowGroupRenderer?: React.ComponentType;
8382
/** A function called for each rendered row that should return a plain key/value pair object */
84-
rowGetter: RowGetter<R>;
85-
/** The number of rows to be rendered */
86-
rowsCount: number;
83+
rows: readonly R[];
8784
/** The minimum height of the grid in pixels */
8885
minHeight?: number;
8986
/** Component used to render a context menu. react-data-grid-addons provides a default context menu which may be used*/
@@ -132,7 +129,7 @@ export interface DataGridProps<R, K extends keyof R> {
132129
*
133130
* @example
134131
*
135-
* <DataGrid columns={columns} rowGetter={i => rows[i]} rowsCount={3} />
132+
* <DataGrid columns={columns} rows={rows} />
136133
*/
137134
function DataGrid<R, K extends keyof R>({
138135
rowKey = 'id' as K,
@@ -152,8 +149,7 @@ function DataGrid<R, K extends keyof R>({
152149
renderBatchSize = 8,
153150
defaultFormatter = ValueFormatter,
154151
columns,
155-
rowsCount,
156-
rowGetter,
152+
rows,
157153
selectedRows,
158154
onSelectedRowsChange,
159155
...props
@@ -251,16 +247,15 @@ function DataGrid<R, K extends keyof R>({
251247
>
252248
<HeaderRow<R, K>
253249
rowKey={rowKey}
254-
rowsCount={rowsCount}
255-
rowGetter={rowGetter}
250+
rows={rows}
256251
height={headerRowHeight}
257252
width={columnMetrics.totalColumnWidth + getScrollbarSize()}
258253
columns={viewportColumns}
259254
onColumnResize={handleColumnResize}
260255
lastFrozenColumnIndex={columnMetrics.lastFrozenColumnIndex}
261256
draggableHeaderCell={props.draggableHeaderCell}
262257
onHeaderDrop={props.onHeaderDrop}
263-
allRowsSelected={selectedRows?.size === rowsCount}
258+
allRowsSelected={selectedRows?.size === rows.length}
264259
onSelectedRowsChange={onSelectedRowsChange}
265260
sortColumn={props.sortColumn}
266261
sortDirection={props.sortDirection}
@@ -279,14 +274,13 @@ function DataGrid<R, K extends keyof R>({
279274
/>
280275
)}
281276
</div>
282-
{rowsCount === 0 && props.emptyRowsView ? createElement(props.emptyRowsView) : (
277+
{rows.length === 0 && props.emptyRowsView ? createElement(props.emptyRowsView) : (
283278
<Canvas<R, K>
284279
ref={ref}
285280
rowKey={rowKey}
286281
rowHeight={rowHeight}
287282
rowRenderer={props.rowRenderer}
288-
rowGetter={rowGetter}
289-
rowsCount={rowsCount}
283+
rows={rows}
290284
selectedRows={selectedRows}
291285
onSelectedRowsChange={onSelectedRowsChange}
292286
columnMetrics={columnMetrics}

src/HeaderRow.test.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ import { DEFINE_SORT } from './common/enums';
99
describe('HeaderRow', () => {
1010
const defaultProps: HeaderRowProps<Row, 'id'> = {
1111
rowKey: 'id',
12-
rowsCount: 20,
13-
rowGetter: jest.fn(),
12+
rows: [],
1413
scrollLeft: 0,
1514
columns: helpers.columns,
1615
lastFrozenColumnIndex: -1,
@@ -77,8 +76,7 @@ describe('HeaderRow', () => {
7776

7877
const requiredProps: HeaderRowProps<Row, 'id'> = {
7978
rowKey: 'id',
80-
rowsCount: 20,
81-
rowGetter: jest.fn(),
79+
rows: [],
8280
scrollLeft: 0,
8381
width: 1000,
8482
height: 35,

src/HeaderRow.tsx

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ import { DataGridProps } from './DataGrid';
66

77
type SharedDataGridProps<R, K extends keyof R> = Pick<DataGridProps<R, K>,
88
| 'draggableHeaderCell'
9-
| 'rowGetter'
10-
| 'rowsCount'
9+
| 'rows'
1110
| 'onHeaderDrop'
1211
| 'onSelectedRowsChange'
1312
| 'sortColumn'
@@ -32,22 +31,21 @@ export default function HeaderRow<R, K extends keyof R>({
3231
width,
3332
onSelectedRowsChange,
3433
rowKey,
35-
rowsCount,
36-
rowGetter,
34+
rows,
3735
...props
3836
}: HeaderRowProps<R, K>) {
3937
const handleAllRowsSelectionChange = useCallback((checked: boolean) => {
4038
if (!onSelectedRowsChange) return;
4139

4240
const newSelectedRows = new Set<R[K]>();
4341
if (checked) {
44-
for (let i = 0; i < rowsCount; i++) {
45-
newSelectedRows.add(rowGetter(i)[rowKey]);
42+
for (const row of rows) {
43+
newSelectedRows.add(row[rowKey]);
4644
}
4745
}
4846

4947
onSelectedRowsChange(newSelectedRows);
50-
}, [onSelectedRowsChange, rowGetter, rowKey, rowsCount]);
48+
}, [onSelectedRowsChange, rows, rowKey]);
5149

5250
return (
5351
<div

0 commit comments

Comments
 (0)