-
Notifications
You must be signed in to change notification settings - Fork 2.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Scrolling improvements #1254
Scrolling improvements #1254
Conversation
32ec3f2
to
f921323
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good, just need to address some of the previous comments
@@ -82,12 +88,12 @@ class Example extends React.Component { | |||
} | |||
} | |||
|
|||
const exampleDescription = <p>To make a given column frozen, set <code>column.locked = true</code>. In this example, the ID columns has been frozen and will remain in position as you scroll horizontally</p> | |||
const exampleDescription = <p>To make a given column frozen, set <code>column.frozen = true</code>. In this example, the ID columns has been frozen and will remain in position as you scroll horizontally</p> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should change the example to use frozen
instead of locked
to avoid any confusion
@@ -149,24 +156,28 @@ class Cell extends React.Component { | |||
getFormatterDependencies = () => { | |||
// convention based method to get corresponding Id or Name of any Name or Id property | |||
if (typeof this.props.column.getRowMetaData === 'function') { | |||
if (process.env.NODE_ENV === 'development') { | |||
console.warn('getRowMetaData for formatters is deprecated and will be removed in a future version of ReactDataGrid. Instead access row prop of formatter'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
let className = joinClasses( | ||
this.props.column.cellClass, | ||
'react-grid-Cell', | ||
this.props.className, | ||
this.props.column.locked ? 'react-grid-Cell--locked' : null | ||
columnUtils.isFrozen(this.props.column) ? 'react-grid-Cell--frozen' : null, | ||
lastFrozenColumnIndex === idx ? 'rdg-last--frozen' : null |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think in the future we should standardize class name. react-grid-
vs rdg-
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
@@ -353,6 +356,11 @@ class ReactDataGrid extends React.Component { | |||
|
|||
onGridRowsUpdated = (cellKey, fromRow, toRow, updated, action, originRow) => { | |||
const { rowGetter, rowKey, onGridRowsUpdated } = this.props; | |||
// Deprecated prop | |||
// to be removed in next major release | |||
if (isFunction(this.props.onRowUpdated)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should add a warning message
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have added deprecation warnings to all soon to be deprecated props
} | ||
}, callback); | ||
} | ||
const callback = openEditor ? this.openEditor : () => null; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just so I understand, what is the reason for callback change from undefined
to () => null
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
selectCell was being called from other places without passing in a second parameter. This was generating a script error so I added a default callback which does nothing
}); | ||
|
||
it('should return totalNumberOfColumns if scroll direction is right', () => { | ||
expect(getColOverscanEndIdx(SCROLL_DIRECTION.RIGHT, colVisibleEndIdx, totalNumberOfColumns)).toBe(totalNumberOfColumns); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice level of tests
72ca61a
to
e6cb143
Compare
e6cb143
to
c07b1b6
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great work 👍
* Allow for optional SimpleCellFormatter.value prop (#948) * Improve Cell navigation Performance (#1123) * Move cell selection responsibilty to SelectionMask component * Selection Mask working at 60fps * Tests for InteractionMask navigation * Editor Container in interaction Layer * commit package-lock.json * Editing Working * smooth scrolling with keyboard navigation * Adjust visible start/end calculations after scroll * Vertical cell Scrolling with keyboard working * generic move command * Vertical scrolling navigation with keyboard working * Code cleanup - Remove extra ref - Format JSX * Update react to the stable version Delete/Ignore package-lock.json * Remove deprecated babel plugins * Export individual constants instead of exporting a default object * Remove react dependency from react-data-grid Delete package.json for now * Remove ReactDOM reference and use refs instead * More code cleanup - Fix formatting - Remove extra spread operator * Add innerRef to fix scrolling Remove unused methods * Remove GridWrapper and GridContainer as it breaks instance methods * Remove unused CellExpander component * - Remove singleton store - Add basic implementation for store/reducer/dispatch - Remove CellContainer to prevent rerendering of each cell on selection change * Delete unused files Cleanup event handlers * Move copy paste functionality to the Interaction mask component Check if cell is editable * Remove flow types * Remove flow types * Remove unused variables * Move copy/paste logic to the interaction layer * Horizontal scroll using keyboard Temporarily disable animation * Rename folder to containers * Fix cell navigation mode * Do not prevent event bubling to show context menu * Add pointer events to fix cell actions * Fix Filter Row focus * Dynamically connect cell to support custom renderers * Fox committing changes Disable cell container component as it degraded performance * Migrate cell drag down to Interaction Layer * Remove react-motion * Add CellMask to highlight copied cell * Add drag mask to highlight dragged cells * Cleanup render method * Add eventbus to communicate with InteractionMask component Delete state and containers * Move EventTypes to contants folder * Fix clicking on a cell scrolls the canvas to the top * Fix cell double click to edit * Fix tests InteractionMasks * Fix issue with press enter not committing * Keep InteractionMask focus logic in central place * Fix canvas tests * Fix Canvas tests * Remove redundant Cell tests * Fix Cell tests and remove redundant ones * Fix clicking on a cell scrolls the canvas to the left Remove componentWillMount * Add a new DragEnter method Some code cleanup * Delete redundant displayStart and displayEnd states * Prevent navigation in FF on drag * Fix Grid.js and remove redundant tests * Move tab behaviour from ReactDataGrid to InteractionMask * Clean up initial tests for tab behavior in InteractionMasks * Fix typo and event name * Use CellNavigationMode constant * Ignore invalid drag items * Use a single div instead of multiple divs for drag mask * Fix SelectionMask zIndex for locked columns * Delete OverflowCell and OverflowRow components * Remove unused props and methods * Clean up props * Fix scrolling when scrollToRowIndex is set * Reorder props for clarity * Commented unused props and methods * Fix ESLint errors * Dispatch SCROLL_TO_COLUMN event to scroll Canvas from ReactDataGrid * Trigger onCellSelected, onCellDeSelected events when cell selection is changed Fix openCellEditor instance method * Fix openCellEditor instance method * Specify required PropTypes * Fix closing tags * Enable auto focus on grid * Fix last row check * Implement tab behavior for InteractionMasks * Fix PropTypes warnings Remove unused state * Fix Cell PropTypes * Fix rowData in EditorContainer * Fix null reference error for drag copy * Check onCheckCellIsEditable for editing * Fix some broken unit tests * Removed redundant and fixed remaining tests * Fix context menu * Fix RowsContainer unit tests * Disable duplicate tests * Fix example home page fonts * Install latest node version * Simplify appveyor script after node upgrade * Fix lint errors * Fix failing IE 11 test * IE compatible version of Array.keys * packages/rdg-test-utils/index.js * Delete unused test-utils project * install gulp gloablly in order to post to coveralls * Use node 6 on appveyor * Delete obsolete scroll utils * Add unit tests for CellMask * Add unit tests for CopyMask * Add unit tests for DragMask * Remove fdescribe * Add unit tests for DragHandle * Add unit tests for EventBus * Format code and object initialization cleanup * Add unit test for copy operation * Use conditional rendering instead of returning null * Add unit tests for Drag functionaity * Add unit tests for the SelectionMask component * Add unit tests for CanvasUtils * Add unit tests for context menu * Add test to check if Canvas renders the InteractionMasks component * Delete commented code * Handle scrolling when selected cell hits the top/bottom boundary when the cellNavigationMode is changeRow * Fix tab behavior * Fix cell selection mask for grouped rows * Add back IE support * Add polyfills for Set and Map to make the examples work in IE10 * Remove unused variable * Fix zIndex for filters * Fix scrolling when editor is closed * Deleted commented code * Fix eslint errors * Delete obsolete tests Remove commented code * Fix Typo * Move the drag enter logic to Row component * Uncomment code * Fix event bus prop type * Define ref callback as a bound method on the class * Remove private getSelectedValue method * Fix Cell component export and columns count (#1227) * Fix cell export * Fix columns count * update file names (#1245) * Rectangular selection range support (on top of 'next') (#1210) * Allow selection of ranges (with mouse & keyboard) Parent components of ReactDataGrid can subscribe to (start, update, end) events about selection ranges. An example page demonstrates this. * Minor InteractionMasks refactoring based on comments on PR #1210 * Update ReactDataGrid API to group cell range event handlers under cellRangeSelection prop * Refactor single and multi-cell range selection masks into components * Revert "Refactor single and multi-cell range selection masks into components" This reverts commit 8ea34d7. * Scrolling improvements (#1254) * Effiecient windowing example * Remove use of refs to setScrollLeft. Renamed row/col visible boundary property names * Calculate overscan columns based on scroll direction * Render overscan columns and rows based on scroll direction * Set height of grid * Improved overscan row/col calcualtion * Send isScrolling prop to formatters to improve perf of complex formatters * Pass isScrolling prop to HeaderCell and Formatter * Pass isScrolling prop to HeaderCell and Formatter 2 * Set pointer-events to none when scrolling * reset setScrollLeft functionality to enable frozen columns * Ensure set scroll left on frozen columns when scrolling in vertical direction * Fix context menu * zindex styles for locked cells * Render overscan columns when row scrolling has complete * Show correct SelectionMask position for locked cells * is scrolling example * Do not deep compare dependentValues check * Ensure rowOverscanEndIdx within bounds * Ensure frozen cells are mounted in correct fixed position if canvas has been scrolled * Move InteractionMasks styles to a separate file * Cherry pick set cell ref commit * Base SelectionMask top and left off rendered cells to handle dynamic row heights * Take scroll left into account when open editor container * Catchup with next branch * Re-add lost canvas.js file * Fix lint errors * Fix some build errors * Remove references to deleted RowsContainer file * Fix typo * Fix InteractionMaks test * Fix some tests * Fix failing tests * Handle dynamic row heights in SelectionMask * Remove unnecessary packages * Viewport scroll calculations * Address pull request comments * use let instead of const in checkScroll function * Remove unneeded id from Row component * Chang logic around getRenderedColumns * Address more PR comments * Tests for Viewport Utils * Fix lint errors and remove console rule from lintrc * Tests for getScrollDirection * Tests for getRowOverscanStartIdx * getRowOverscanEndIdx tests * Tests for getColOverscanEndIdx * Tidy up syntax in example31-isScrolling * Ensure locked columns are shifted to start of column metrics array * Test for rendering the correct cells * Fix lint errors * Rename all fixed/locked/frozen columns to frozen * Fix tests after npm update * Fix IE test * Fixed new warnings in tests * Fix failing test * Update version to 5.0.0-alpha1 * Ensure render all visible columns if scrolled to the right and using frozen columns * Version bump * Change test expectation * Fix test * Ensure last column is rendered when grid scrolled and using frozen columns * Minor version bump * Handle viewport scroll state when no columns present * 5.0.0-alpha8 * Fallback for getSelectedRowTop if no access to row ref * Fix some bugs around cell selection for RowGroups * Fix failing test * Pass row prop to formatters * Fix failing test and version bump * Fix lint error * Re-add deprecated onRowUpdatedMethod - to be removed in v6 * Address some more PR comments * Air BNB browser shims for Enzyme testing * Remove unused functions * prop deprecation warnings * onDragHandleDoubleClick deprecation warning * Publish next branch on commit to next * Get selected row columns if applicable * Fix failing tests * Update npmrc token * Fix some zIndex issues around frozen cells and editors * Remove ReactDataGrid dependency from addons bundle (#1272) * Fix some zIndex issues around frozen cells and editors * Remove rdg dependency from addons package * Fix object assign * Adress PR comments * Fix tests * Fix lint error * add ref to draggable header cell * Adress PR comments * Pass renderBase row and correct ref to custom row renderer * Change editor container to be fixed position * Add missing rdg-editor-container class on EditorContainer (#1275) * Ensure row refs reference an RDG Row component * Show all columns unless scrolling vertically * isFrozen column check * Render edtior container without taking scrollLeft into account if column is frozen * Set CellMask position to be fixed when scrolling horizontally and frozen column is selected * Unit tests and refactoring (#1279) Added unit tests for editor position relating to frozen columns. And refactored spec file, updating legacy code * Upgrade to RDG 5
const { key, formatter } = column; | ||
const baseCellProps = { key: `${key}-${idx}`, idx: i, rowIdx: idx, height: this.getRowHeight(), column, cellMetaData }; | ||
const baseCellProps = { key: `${key}-${idx}`, idx: column.idx, rowIdx: idx, height: this.getRowHeight(), column, cellMetaData }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@amanmahajan7, it looks like the cause of #1343 may be that the change from i
to column.idx
was not fully done in getCell
. It looks like i
can just be removed as a second parameter here and then I can change key || i
to key || column.idx
.
Before I do that though, is there any chance that would break frozen columns or some other new feature?
Description
This PR improves scrolling performance, and addresses some minor bug fixes introduced by #1123
Please check if the PR fulfills these requirements
Tasks: