moving tables to react-window

Summary:
Tables were using a custom virtualization, which wasn't as performant as other solutions out there. In this diff, the table component is reworked for performance.
- removes `Table` component, because it was never used standalone, `ManagedTable` is what all plugins used
- uses `react-window` for `ManagedTable`
- reworks table highlighting and arrow-navigation to work with the new virtualization
- moves actual filtering out of `ManagedTable` into `Searchable` component for a better separation of concerns.

Reviewed By: jknoxville

Differential Revision: D9447721

fbshipit-source-id: 15eb2eb55eed9f49a0cb1ccfb2d748b3672fa898
This commit is contained in:
Daniel Büchele
2018-08-23 04:43:51 -07:00
committed by Facebook Github Bot
parent 33f34650df
commit 1891e2c869
13 changed files with 611 additions and 1253 deletions

View File

@@ -6,7 +6,6 @@
*/
import type {
TableColumnKeys,
TableColumnOrder,
TableColumnSizes,
TableColumns,
@@ -193,7 +192,6 @@ class TableHeadColumn extends PureComponent<{
export default class TableHead extends PureComponent<{
columnOrder: TableColumnOrder,
onColumnOrder: ?(order: TableColumnOrder) => void,
columnKeys: TableColumnKeys,
columns: TableColumns,
sortOrder: ?TableRowSortOrder,
onSort: ?TableOnSort,
@@ -201,8 +199,15 @@ export default class TableHead extends PureComponent<{
onColumnResize: ?TableOnColumnResize,
}> {
buildContextMenu = (): MenuTemplate => {
const visibles = this.props.columnOrder
.map(c => (c.visible ? c.key : null))
.filter(Boolean)
.reduce((acc, cv) => {
acc.add(cv);
return acc;
}, new Set());
return Object.keys(this.props.columns).map(key => {
const visible = this.props.columnKeys.includes(key);
const visible = visibles.has(key);
return {
label: this.props.columns[key].value,
click: () => {