Prevent TypeError exception on missing column.

Summary: Fix a TypeError exception in TableHead.tsx when an ordered column is not present in the row.

Reviewed By: aigoncharov

Differential Revision: D36497494

fbshipit-source-id: 18c961468fc2bc3cca16290fd9e6c973e5e18ebf
This commit is contained in:
Muzammil Mahmood
2022-05-20 02:54:00 -07:00
committed by Facebook GitHub Bot
parent a7b148fcc2
commit ec6f732b09
2 changed files with 16 additions and 5 deletions

View File

@@ -202,7 +202,7 @@ export class ManagedTable extends React.Component<
Object.keys(this.props.columns).map((key) => ({key, visible: true}));
this.state = {
columnOrder,
columnKeys: this.computeColumnKeys(columnOrder),
columnKeys: this.computeColumnKeys(columnOrder, this.props.columns),
columnSizes:
this.props.tableKey && globalTableState[this.props.tableKey]
? globalTableState[this.props.tableKey]
@@ -254,7 +254,10 @@ export class ManagedTable extends React.Component<
}
this.setState({
columnOrder: nextProps.columnOrder,
columnKeys: this.computeColumnKeys(nextProps.columnOrder),
columnKeys: this.computeColumnKeys(
nextProps.columnOrder,
this.props.columns,
),
});
}
@@ -300,8 +303,12 @@ export class ManagedTable extends React.Component<
this.firstUpdate = false;
}
computeColumnKeys(columnOrder: TableColumnOrder) {
return columnOrder.map((k) => (k.visible ? k.key : null)).filter(notNull);
computeColumnKeys(columnOrder: TableColumnOrder, columns: TableColumns) {
return columnOrder
.map((k) =>
k.visible && Object.keys(columns).includes(k.key) ? k.key : null,
)
.filter(notNull);
}
scrollToHighlightedRows = () => {
@@ -676,7 +683,7 @@ export class ManagedTable extends React.Component<
for (let index = 0; index < columnOrder.length; index++) {
const col = columnOrder[index];
if (!col.visible) {
if (!col.visible || !columns[col.key]) {
continue;
}

View File

@@ -277,6 +277,10 @@ export default class TableHead extends PureComponent<{
const key = column.key;
const col = columns[key];
if (!col) {
console.warn('no column for key: ', key);
continue;
}
let arrow;
if (col.sortable === true && sortOrder && sortOrder.key === key) {