diff --git a/desktop/app/src/ui/components/searchable/SearchableTable.tsx b/desktop/app/src/ui/components/searchable/SearchableTable.tsx index 86eb578df..60e34e414 100644 --- a/desktop/app/src/ui/components/searchable/SearchableTable.tsx +++ b/desktop/app/src/ui/components/searchable/SearchableTable.tsx @@ -157,7 +157,7 @@ class SearchableManagedTable extends PureComponent { filter={this.state.filterRows} rows={rows.filter(this.state.filterRows)} onAddFilter={addFilter} - ref={innerRef} + innerRef={innerRef} /> ); } diff --git a/desktop/app/src/ui/components/table/ManagedTable.tsx b/desktop/app/src/ui/components/table/ManagedTable.tsx index 2b8a07570..ccd245f52 100644 --- a/desktop/app/src/ui/components/table/ManagedTable.tsx +++ b/desktop/app/src/ui/components/table/ManagedTable.tsx @@ -137,6 +137,12 @@ export type ManagedTableProps = { * Whether to allow navigation via arrow keys. Default: true */ enableKeyboardNavigation?: boolean; + /** + * Reference to the managed table. + */ + innerRef?: + | React.MutableRefObject + | ((ref: ManagedTable | undefined) => void); }; type ManagedTableState = { @@ -209,10 +215,21 @@ export class ManagedTable extends React.Component< componentDidMount() { document.addEventListener('keydown', this.onKeyDown); + + if (typeof this.props.innerRef === 'function') { + this.props.innerRef(this); + } else if (this.props.innerRef) { + this.props.innerRef.current = this; + } } componentWillUnmount() { document.removeEventListener('keydown', this.onKeyDown); + if (typeof this.props.innerRef === 'function') { + this.props.innerRef(undefined); + } else if (this.props.innerRef) { + this.props.innerRef.current = undefined; + } } UNSAFE_componentWillReceiveProps(nextProps: ManagedTableProps) {