Allow passing external virtualizedRef to DataTable

Summary: External virtualRef allows us to scroll the table programmatically whenever we want

Reviewed By: antonk52

Differential Revision: D44746968

fbshipit-source-id: ad8e0fb3b43881ed8f4ba114cd35c08643ef0d3b
This commit is contained in:
Andrey Goncharov
2023-04-06 10:10:34 -07:00
committed by Facebook GitHub Bot
parent f63ea1f9bd
commit 4e898eb01a
2 changed files with 9 additions and 1 deletions

View File

@@ -61,6 +61,8 @@ export {DataTableManager} from './ui/data-table/DataTableManager';
export {DataList} from './ui/DataList';
export {Spinner} from './ui/Spinner';
export {DataSourceVirtualizer} from './data-source/DataSourceRendererVirtual';
export {
Interactive as _Interactive,
InteractiveProps as _InteractiveProps,

View File

@@ -75,6 +75,7 @@ type DataTableBaseProps<T = any> = {
onSelect?(record: T | undefined, records: T[]): void;
onRowStyle?(record: T): CSSProperties | undefined;
tableManagerRef?: RefObject<DataTableManager<T> | undefined>; // Actually we want a MutableRefObject, but that is not what React.createRef() returns, and we don't want to put the burden on the plugin dev to cast it...
virtualizerRef?: RefObject<DataSourceVirtualizer | undefined>;
onCopyRows?(records: T[]): string;
onContextMenu?: (selection: undefined | T) => React.ReactElement;
onRenderEmpty?:
@@ -159,7 +160,12 @@ export function DataTable<T extends object>(
// eslint-disable-next-line
const scope = isUnitTest ? '' : usePluginInstanceMaybe()?.definition.id ?? '';
const virtualizerRef = useRef<DataSourceVirtualizer | undefined>();
let virtualizerRef = useRef<DataSourceVirtualizer | undefined>();
if (props.virtualizerRef) {
virtualizerRef = props.virtualizerRef as React.MutableRefObject<
DataSourceVirtualizer | undefined
>;
}
const [tableState, dispatch] = useReducer(
dataTableManagerReducer as DataTableReducer<T>,
undefined,