diff --git a/package.json b/package.json index 2fc6543a70..28e9e9656a 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "react-dom": "^16.10.1", "react-router-dom": "^5.1.2", "recharts": "^1.7.1", + "source-map-loader": "^0.2.4", "style-loader": "^1.0.0", "terser-webpack-plugin": "^2.1.2", "ts-jest": "^24.1.0", diff --git a/packages/react-data-grid/src/Canvas.tsx b/packages/react-data-grid/src/Canvas.tsx index 0af00a83aa..1186d784b1 100644 --- a/packages/react-data-grid/src/Canvas.tsx +++ b/packages/react-data-grid/src/Canvas.tsx @@ -1,8 +1,7 @@ -import React from 'react'; +import React, { Fragment } from 'react'; import { isElement } from 'react-is'; import Row from './Row'; -import RowsContainerDefault from './RowsContainer'; import RowGroup from './RowGroup'; import { InteractionMasks } from './masks'; import { getColumnScrollPosition, isPositionStickySupported } from './utils'; @@ -278,7 +277,7 @@ export default class Canvas extends React.PureComponent> { render() { const { rowOverscanStartIdx, rowOverscanEndIdx, cellMetaData, columns, colOverscanStartIdx, colOverscanEndIdx, colVisibleStartIdx, colVisibleEndIdx, lastFrozenColumnIndex, rowHeight, rowsCount, width, height, rowGetter, contextMenu, isScrolling, scrollLeft } = this.props; - const RowsContainer = this.props.RowsContainer || RowsContainerDefault; + const RowsContainer = this.props.RowsContainer || Fragment; const rows = this.getRows(rowOverscanStartIdx, rowOverscanEndIdx) .map(({ row, subRowDetails }, idx) => { @@ -351,8 +350,7 @@ export default class Canvas extends React.PureComponent> { {...this.props.interactionMasksMetaData} /> - {/* Set minHeight to show horizontal scrollbar when there are no rows */} -
{rows}
+
{rows}
); diff --git a/packages/react-data-grid/src/ReactDataGrid.tsx b/packages/react-data-grid/src/ReactDataGrid.tsx index 175f6e8eff..3de5818252 100644 --- a/packages/react-data-grid/src/ReactDataGrid.tsx +++ b/packages/react-data-grid/src/ReactDataGrid.tsx @@ -12,7 +12,6 @@ import Grid from './Grid'; import ToolbarContainer, { ToolbarProps } from './ToolbarContainer'; import { getColumnMetrics } from './ColumnMetrics'; import { ScrollState } from './Viewport'; -import { RowsContainerProps } from './RowsContainer'; import { EventBus } from './masks'; import { CellNavigationMode, EventTypes, UpdateActions, HeaderRowType, DEFINE_SORT } from './common/enums'; import { @@ -28,6 +27,7 @@ import { HeaderRowData, InteractionMasksMetaData, Position, + RowsContainerProps, RowExpandToggleEvent, RowGetter, SelectedRange, diff --git a/packages/react-data-grid/src/RowsContainer.tsx b/packages/react-data-grid/src/RowsContainer.tsx deleted file mode 100644 index b8e29f97ee..0000000000 --- a/packages/react-data-grid/src/RowsContainer.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react'; - -export interface RowsContainerProps { - id: string; - children: React.ReactNode; -} - -export default function RowsContainer({ children }: RowsContainerProps) { - return <>{children}; -} diff --git a/packages/react-data-grid/src/__tests__/Canvas.spec.tsx b/packages/react-data-grid/src/__tests__/Canvas.spec.tsx index 532f9f1ba3..c9df2be97a 100644 --- a/packages/react-data-grid/src/__tests__/Canvas.spec.tsx +++ b/packages/react-data-grid/src/__tests__/Canvas.spec.tsx @@ -3,7 +3,6 @@ import { shallow } from 'enzyme'; import InteractionMasks from '../masks/InteractionMasks'; import Canvas, { CanvasProps } from '../Canvas'; -import RowsContainer from '../RowsContainer'; import EventBus from '../masks/EventBus'; import { CellNavigationMode } from '../common/enums'; import { CalculatedColumn } from '../common/types'; @@ -15,7 +14,7 @@ interface Row { } const noop = () => null; -const getRows = (wrp: ReturnType) => wrp.find(RowsContainer).children().props().children; +const getRows = (wrp: ReturnType) => wrp.find('.rdg-rows-container').props().children as JSX.Element[]; const testProps: CanvasProps = { rowKey: 'row', @@ -55,7 +54,6 @@ const testProps: CanvasProps = { width: 1000, onScroll() {}, lastFrozenColumnIndex: 0, - RowsContainer: RowsContainer as CanvasProps['RowsContainer'], scrollTop: 0, scrollLeft: 0 }; diff --git a/packages/react-data-grid/src/common/types.ts b/packages/react-data-grid/src/common/types.ts index 69242bca32..e636b2beff 100644 --- a/packages/react-data-grid/src/common/types.ts +++ b/packages/react-data-grid/src/common/types.ts @@ -168,6 +168,11 @@ export interface CellRendererProps { onRowSelectionChange(rowIdx: number, row: TRow, checked: boolean, isShiftClick: boolean): void; } +export interface RowsContainerProps { + id: string; + children: React.ReactElement; +} + export interface RowRendererProps { height: number; columns: CalculatedColumn[]; diff --git a/packages/react-data-grid/style/rdg-core.less b/packages/react-data-grid/style/rdg-core.less index dbd0022154..6b856eaaec 100644 --- a/packages/react-data-grid/style/rdg-core.less +++ b/packages/react-data-grid/style/rdg-core.less @@ -17,4 +17,11 @@ overflow-x: auto; overflow-y: scroll; background-color: #fff; + // will-change promotes the canvas to a new layer, improving scroll responsiveness + will-change: transform; +} + +.rdg-rows-container { + // min-height is here to show the horizontal scrollbar when there are no rows + min-height: 1px; } diff --git a/webpack-dev-server.js b/webpack-dev-server.js index 69622e9d36..fea0bd3ea1 100644 --- a/webpack-dev-server.js +++ b/webpack-dev-server.js @@ -8,6 +8,7 @@ const RELEASE = process.argv.slice(2).includes('--release'); const config = { mode: RELEASE ? 'production' : 'development', + devtool: 'eval-source-map', entry: { index: [ 'webpack-dev-server/client?http://localhost:8080/', @@ -27,7 +28,12 @@ const config = { module: { rules: [ { - test: /\.(js|jsx)$/, + test: /\.js$/, + use: ['source-map-loader'], + enforce: 'pre' + }, + { + test: /\.jsx?$/, exclude: /node_modules/, use: ['babel-loader'] },