Skip to content

Commit

Permalink
fix for bvaughn#998
Browse files Browse the repository at this point in the history
  • Loading branch information
didiercolens committed Feb 4, 2018
1 parent e775173 commit 65a62ad
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 1 deletion.
80 changes: 80 additions & 0 deletions source/Grid/Grid.jest.js
Original file line number Diff line number Diff line change
Expand Up @@ -637,6 +637,86 @@ describe('Grid', () => {
expect(node.scrollTop).toBe(1920);
});

// See issue #998
it('call to recomputeGridSize should not reset position to scrollToRow when scrolling forward', () => {
const cellRendererCalls = [];
function cellRenderer({ columnIndex, key, rowIndex, style }) {
cellRendererCalls.push({ columnIndex, rowIndex });
return defaultCellRenderer({ columnIndex, key, rowIndex, style });
}
const props = {
cellRenderer,
columnWidth: 100,
height: 40,
rowHeight: 20,
scrollToRow: 0,
width: 100,
};

const grid = render(getMarkup(props));
expect(cellRendererCalls).toEqual([
{ columnIndex: 0, rowIndex: 0 },
{ columnIndex: 0, rowIndex: 1 },
]);

//scroll forward to row 45
simulateScroll({ grid, scrollTop: 900 });

expect(grid.state.scrollDirectionVertical).toEqual(
SCROLL_DIRECTION_FORWARD,
);
cellRendererCalls.splice(0);

grid.recomputeGridSize({ rowIndex: 45 });

//grid should still be at row 45
expect(cellRendererCalls).toEqual([
{ columnIndex: 0, rowIndex: 45 },
{ columnIndex: 0, rowIndex: 46 },
]);
});
// see #998
it('call to recomputeGridSize should not reset position to scrollToRow when scrolling backward', () => {
const cellRendererCalls = [];
function cellRenderer({ columnIndex, key, rowIndex, style }) {
cellRendererCalls.push({ columnIndex, rowIndex });
return defaultCellRenderer({ columnIndex, key, rowIndex, style });
}
const props = {
cellRenderer,
columnWidth: 100,
height: 40,
rowHeight: 20,
scrollToRow: 99,
width: 100,
};

const grid = render(getMarkup(props));
expect(cellRendererCalls).toEqual([
{ columnIndex: 0, rowIndex: 0 },
{ columnIndex: 0, rowIndex: 1 },
{ columnIndex: 0, rowIndex: 98 },
{ columnIndex: 0, rowIndex: 99 },
]);

//scroll backward to row 45
simulateScroll({ grid, scrollTop: 900 });

expect(grid.state.scrollDirectionVertical).toEqual(
SCROLL_DIRECTION_BACKWARD,
);
cellRendererCalls.splice(0);

grid.recomputeGridSize({ rowIndex: 45 });

//grid should still be at row 45
expect(cellRendererCalls).toEqual([
{ columnIndex: 0, rowIndex: 45 },
{ columnIndex: 0, rowIndex: 46 },
]);
});


it('should restore scroll offset for column when row count increases from 0 (and vice versa)', () => {
const props = {
columnWidth: 50,
Expand Down
5 changes: 4 additions & 1 deletion source/Grid/Grid.js
Original file line number Diff line number Diff line change
Expand Up @@ -481,7 +481,10 @@ export default class Grid extends React.PureComponent<Props, State> {
// Store this flag to let the next cDU pass know it needs to recompute the scroll offset.
this._recomputeScrollLeftFlag =
scrollToColumn >= 0 && columnIndex <= scrollToColumn;
this._recomputeScrollTopFlag = scrollToRow >= 0 && rowIndex <= scrollToRow;
this._recomputeScrollTopFlag = scrollToRow >= 0 &&
(this.state.scrollDirectionVertical === SCROLL_DIRECTION_FORWARD ?
rowIndex <= scrollToRow :
rowIndex >= scrollToRow);

// Clear cell cache in case we are scrolling;
// Invalid row heights likely mean invalid cached content as well.
Expand Down

0 comments on commit 65a62ad

Please sign in to comment.