flipper-plugin
Version:
Flipper Desktop plugin SDK and components
79 lines • 2.97 kB
TypeScript
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/
import React, { RefObject, CSSProperties } from 'react';
import { Percentage } from '../../utils/widthUtils';
import { DataSourceVirtualizer, DataSourceView, DataSource } from '../../data-source/index';
import { DataTableManager } from './DataTableManager';
import { Formatter } from '../DataFormatter';
type DataTableBaseProps<T = any> = {
columns: DataTableColumn<T>[];
enableSearchbar?: boolean;
enableAutoScroll?: boolean;
enableHorizontalScroll?: boolean;
enableColumnHeaders?: boolean;
enableMultiSelect?: boolean;
enableContextMenu?: boolean;
enablePersistSettings?: boolean;
enableMultiPanels?: boolean;
scrollable?: boolean;
extraActions?: React.ReactElement;
onSelect?(record: T | undefined, records: T[]): void;
onRowStyle?(record: T): CSSProperties | undefined;
tableManagerRef?: RefObject<DataTableManager<T> | undefined>;
virtualizerRef?: RefObject<DataSourceVirtualizer | undefined>;
onCopyRows?(records: T[]): string;
onContextMenu?: (selection: undefined | T) => React.ReactElement;
onRenderEmpty?: null | ((dataView?: DataSourceView<T, T[keyof T]>) => React.ReactElement);
};
export type ItemRenderer<T> = (item: T, selected: boolean, index: number) => React.ReactNode;
type DataTableInput<T = any> = {
dataSource: DataSource<T, T[keyof T]>;
viewId?: string;
records?: undefined;
recordsKey?: undefined;
} | {
records: readonly T[];
recordsKey?: keyof T;
viewId?: string;
dataSource?: undefined;
};
export type DataTableColumn<T = any> = {
key: keyof T & string;
onRender?: (row: T, selected: boolean, index: number) => React.ReactNode;
formatters?: Formatter[] | Formatter;
title?: string;
width?: number | Percentage | undefined;
wrap?: boolean;
align?: 'left' | 'right' | 'center';
visible?: boolean;
filters?: {
label: string;
value: string;
enabled: boolean;
predefined?: boolean;
strict?: boolean;
exact?: boolean;
}[];
inversed?: boolean;
sortable?: boolean;
};
export interface TableRowRenderContext<T = any> {
columns: DataTableColumn<T>[];
onMouseEnter(e: React.MouseEvent<HTMLDivElement>, item: T, itemId: number): void;
onMouseDown(e: React.MouseEvent<HTMLDivElement>, item: T, itemId: number): void;
onRowStyle?(item: T): React.CSSProperties | undefined;
onContextMenu?(): React.ReactElement;
}
export type DataTableProps<T> = DataTableInput<T> & DataTableBaseProps<T>;
export declare function DataTable<T extends object>(props: DataTableProps<T>): React.ReactElement;
export declare namespace DataTable {
var defaultProps: Partial<DataTableProps<any>>;
}
export {};
//# sourceMappingURL=DataTable.d.ts.map