From e21e44ca9c04d80620930e561e2fd3df6d1ba19f Mon Sep 17 00:00:00 2001 From: Bucky Schwarz Date: Tue, 31 Mar 2020 17:34:04 -0700 Subject: [PATCH] perf: TableGraphTable: tweak rendering internal state fields that are often re-updated but rarely change value were moved out of react state and into internal component state. changing these values won't force re-renders. --- CHANGELOG.md | 1 + .../components/tables/TableGraphTable.tsx | 36 ++++++++++--------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 03f3148edc5..f9bc4732866 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ 1. [17384](https://github.com/influxdata/influxdb/pull/17384): Reuse slices built by iterator to reduce allocations 1. [17404](https://github.com/influxdata/influxdb/pull/17404): Updated duplicate check error message to be more explicit and actionable 1. [17515](https://github.com/influxdata/influxdb/pull/17515): Editing a table cell shows the proper values and respects changes +1. [17521](https://github.com/influxdata/influxdb/pull/17521): Table view scrolling should be slightly smoother ### UI Improvements diff --git a/ui/src/shared/components/tables/TableGraphTable.tsx b/ui/src/shared/components/tables/TableGraphTable.tsx index c095fada597..4f2436c28ba 100644 --- a/ui/src/shared/components/tables/TableGraphTable.tsx +++ b/ui/src/shared/components/tables/TableGraphTable.tsx @@ -57,8 +57,6 @@ type Props = OwnProps & InjectedHoverProps interface State { timeColumnWidth: number - hoveredColumnIndex: number - hoveredRowIndex: number totalColumnWidths: number shouldResize: boolean } @@ -69,13 +67,21 @@ class TableGraphTable extends PureComponent { timeColumnWidth: 0, shouldResize: false, totalColumnWidths: 0, - hoveredRowIndex: NULL_ARRAY_INDEX, - hoveredColumnIndex: NULL_ARRAY_INDEX, } + protected hoveredColumnIndex: number + protected hoveredRowIndex: number + private gridContainer: HTMLDivElement private multiGrid?: MultiGrid + constructor(props) { + super(props) + + this.hoveredRowIndex = NULL_ARRAY_INDEX + this.hoveredColumnIndex = NULL_ARRAY_INDEX + } + public componentDidUpdate() { if (this.state.shouldResize) { if (this.multiGrid) { @@ -217,9 +223,8 @@ class TableGraphTable extends PureComponent { const { transformedDataBundle: {sortedTimeVals}, } = this.props - const {hoveredColumnIndex} = this.state const {hoverTime} = this.props - const hoveringThisTable = hoveredColumnIndex !== NULL_ARRAY_INDEX + const hoveringThisTable = this.hoveredColumnIndex !== NULL_ARRAY_INDEX if (!hoverTime || hoveringThisTable || !this.isTimeVisible) { return {scrollToColumn: 0, scrollToRow: -1} @@ -266,10 +271,9 @@ class TableGraphTable extends PureComponent { onSetHoverTime(new Date(hoverTime).valueOf()) } - this.setState({ - hoveredColumnIndex: +dataset.columnIndex, - hoveredRowIndex: +dataset.rowIndex, - }) + + this.hoveredColumnIndex = +dataset.columnIndex + this.hoveredRowIndex = +dataset.rowIndex } private handleMouseLeave = (): void => { @@ -278,10 +282,9 @@ class TableGraphTable extends PureComponent { if (onSetHoverTime) { onSetHoverTime(0) } - this.setState({ - hoveredColumnIndex: NULL_ARRAY_INDEX, - hoveredRowIndex: NULL_ARRAY_INDEX, - }) + + this.hoveredColumnIndex = NULL_ARRAY_INDEX + this.hoveredRowIndex = NULL_ARRAY_INDEX } private calculateColumnWidth = (columnSizerWidth: number) => (column: { @@ -361,9 +364,8 @@ class TableGraphTable extends PureComponent { onSort, properties, } = this.props - const {hoveredRowIndex, hoveredColumnIndex} = this.state const {scrollToRow} = this.scrollToColRow - const hoverIndex = scrollToRow >= 0 ? scrollToRow : hoveredRowIndex + const hoverIndex = scrollToRow >= 0 ? scrollToRow : this.hoveredRowIndex return ( { hoveredRowIndex={hoverIndex} properties={properties} resolvedFieldOptions={resolvedFieldOptions} - hoveredColumnIndex={hoveredColumnIndex} + hoveredColumnIndex={this.hoveredColumnIndex} isFirstColumnFixed={this.fixFirstColumn} isVerticalTimeAxis={this.isVerticalTimeAxis} onClickFieldName={onSort}