react-table-6
Version:
A fast, lightweight, opinionated table and datagrid built on React
749 lines (591 loc) • 24.2 kB
TypeScript
declare module 'react-table-6' {
// Type definitions for react-table 6.8
// Project: https://github.com/react-tools/react-table
// Definitions by: Roy Xue <https://github.com/royxue>,
// Pavel Sakalo <https://github.com/psakalo>,
// Krzysztof Porębski <https://github.com/Havret>,
// Andy S <https://github.com/andys8>,
// Grzegorz Rozdzialik <https://github.com/Gelio>
// Cam Pepin <https://github.com/cpepin>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.8
import * as React from 'react';
export type ReactTableFunction = (value?: any) => void;
export type AccessorFunction<D = any> = (row: D) => any;
export type Accessor<D = any> = string | string[] | AccessorFunction<D>;
export type Aggregator = (values: any, rows: any) => any;
export type TableCellRenderer = ((cellInfo: CellInfo, column: any) => React.ReactNode) | React.ReactNode;
export type FilterRender = (params: { column: Column, filter: any, onChange: ReactTableFunction, key?: string }) => React.ReactElement;
export type PivotRenderer = ((cellInfo: CellInfo) => React.ReactNode) | (() => any) | string | React.ReactNode;
export type ComponentPropsGetter0 = (finalState: any, rowInfo: undefined, column: undefined, instance?: any) => object | undefined;
export type ComponentPropsGetterR = (finalState: any, rowInfo?: RowInfo, column?: undefined, instance?: any) => object | undefined;
export type ComponentPropsGetterC = (finalState: any, rowInfo?: undefined, column?: Column, instance?: any) => object | undefined;
export type ComponentPropsGetterRC = (finalState: any, rowInfo?: RowInfo, column?: Column, instance?: any) => object | undefined;
export type DefaultFilterFunction = (filter: Filter, row: any, column: any) => boolean;
export type FilterFunction = (filter: Filter, rows: any[], column: any) => any[];
export type SubComponentFunction = (rowInfo: RowInfo) => React.ReactNode;
export type PageChangeFunction = (page: number) => void;
export type PageSizeChangeFunction = (newPageSize: number, newPage: number) => void;
export type SortedChangeFunction = (newSorted: SortingRule[], column: any, additive: boolean) => void;
export type FilteredChangeFunction = (newFiltering: Filter[], column: any, value: any) => void;
export type ExpandedChangeFunction = (column: any, event: any, isTouch: boolean) => void;
export type ResizedChangeFunction = (newResized: Resize[], event: any) => void;
export type SortFunction = (a: any, b: any, desc: any) => number;
export interface Resize {
id: string;
value: any;
}
export interface Filter {
id: string;
value: any;
pivotId?: string;
}
export interface SortingRule {
id: string;
desc: boolean;
}
export interface TableProps<D = any, ResolvedData = D> extends
TextProps,
ComponentDecoratorProps,
ControlledStateCallbackProps,
PivotingProps,
ControlledStateOverrideProps,
ComponentProps {
/** Default: [] */
data: D[];
resolveData?: (data: D[]) => ResolvedData[];
/** Default: false */
loading: boolean;
/** Default: true */
showPagination: boolean;
/** Default: false */
showPaginationTop: boolean;
/** Default: true */
showPaginationBottom: boolean;
/** Default: false */
manual: boolean;
/** Default: true */
multiSort: boolean;
/** Default: true */
showPageSizeOptions: boolean;
/** Default: [5, 10, 20, 25, 50, 100] */
pageSizeOptions: number[];
/** Default: 20 */
defaultPageSize: number;
/**
* Default: undefined
* Otherwise take value from 'pageSize' if defined
* @TODO: add minRows to react-table defaultProps even if undefined
*/
minRows: number | undefined;
/** Default: true */
showPageJump: boolean;
/** Default: true */
sortable: boolean;
/** Default: true */
collapseOnSortingChange: boolean;
/** Default: true */
collapseOnPageChange: boolean;
/** Default: true */
collapseOnDataChange: boolean;
/** Default: false */
freezeWhenExpanded: boolean;
/** Default: [] */
defaultSorting: SortingRule[];
/** Default: false */
showFilters: boolean;
/** Default: [] */
defaultFiltering: Filter[];
/** Default: ... */
defaultFilterMethod: DefaultFilterFunction;
/** Default: ... */
defaultSortMethod: SortFunction;
/** Default: true */
resizable: boolean;
/** Default: false */
filterable: boolean;
/** Default: [] */
defaultResizing: Resize[];
/** Default: false */
defaultSortDesc: boolean;
/** Default: [] */
defaultSorted: SortingRule[];
/** Default: [] */
defaultFiltered: Filter[];
/** Default: [] */
defaultResized: Resize[];
/** Default: {} */
defaultExpanded: {};
/** On change. */
onChange: ReactTableFunction;
/**
* Default: string
* Adding a -striped className to ReactTable will slightly color odd numbered rows for legibility
* Adding a -highlight className to ReactTable will highlight any row as you hover over it
*/
className: string;
/** Default: {} */
style: object;
/** Global Column Defaults */
column: Partial<GlobalColumn>;
/** Array of all Available Columns */
columns?: Array<Column<ResolvedData>>;
/** Expander defaults. */
expanderDefaults: Partial<ExpanderDefaults>;
/** Privot defaults. */
pivotDefaults: Partial<PivotDefaults>;
/** The content rendered inside of a padding row */
PadRowComponent: () => React.ReactNode;
/** Server-side callbacks */
onFetchData: (state: any, instance: any) => void;
/** Control callback for functional rendering */
children: (
state: FinalState<ResolvedData>,
makeTable: () => React.ReactElement,
instance: Instance<ResolvedData>
) => React.ReactNode;
}
export interface ControlledStateOverrideProps {
/** Default: undefined */
page: number | undefined;
/** Default: undefined */
pageSize: number | undefined;
/** Default: undefined */
pages: number | undefined;
/** Default: undefined */
sorting: number;
/** Default: [] */
sorted: SortingRule[];
/** Default: [] */
filtered: Filter[];
/** Default: [] */
resized: Resize[];
/** Default: {} */
expanded: {};
/** Sub component */
SubComponent: SubComponentFunction;
}
export interface PivotingProps {
/** Default: undefined */
pivotBy: string[];
/** Default: 200 */
pivotColumnWidth: number;
/** Default: _pivotVal */
pivotValKey: string;
/** Default: _pivotID */
pivotIDKey: string;
/** Default: _subRows */
subRowsKey: string;
/** Default: _aggregated */
aggregatedKey: string;
/** Default: _nestingLevel */
nestingLevelKey: string;
/** Default: _original */
originalKey: string;
/** Default: _index */
indexKey: string;
/** Default: _groupedByPivot */
groupedByPivotKey: string;
/**
* Default: {} - Pivoting State Overrides (see Fully Controlled Component section)
* @example { 4: true }
* @example { 5: { 9: true }, 10: true }
*/
expandedRows: ExpandedRows;
/** Default: ??? - Pivoting State Callbacks */
onExpandRow: ReactTableFunction;
}
export interface ExpandedRows {
[idx: number]: boolean | ExpandedRows;
}
export interface DerivedDataObject {
_index: number;
_nestingLevel: number;
_subRows: any;
_original: any;
[p: string]: any;
}
export interface ControlledStateCallbackProps {
/** Called when the page index is changed by the user */
onPageChange: PageChangeFunction;
/**
* Called when the pageSize is changed by the user. The resolve page is also sent
* to maintain approximate position in the data
*/
onPageSizeChange: PageSizeChangeFunction;
/**
* Called when a sortable column header is clicked with the column itself and if
* the shiftkey was held. If the column is a pivoted column, `column` will be an array of columns
*/
onSortedChange: SortedChangeFunction;
/**
* Called when a user enters a value into a filter input field or the value passed
* to the onFiltersChange handler by the Filter option.
*/
onFilteredChange: FilteredChangeFunction;
/** Called when an expander is clicked. Use this to manage `expanded` */
onExpandedChange: ExpandedChangeFunction;
/** Called when a user clicks on a resizing component (the right edge of a column header) */
onResizedChange: ResizedChangeFunction;
}
export interface ComponentDecoratorProps {
getProps: ComponentPropsGetterRC | ComponentPropsGetterC | ComponentPropsGetter0;
getTableProps: ComponentPropsGetter0;
getTheadGroupProps: ComponentPropsGetter0;
getTheadGroupTrProps: ComponentPropsGetter0;
getTheadGroupThProps: ComponentPropsGetterC;
getTheadProps: ComponentPropsGetter0;
getTheadTrProps: ComponentPropsGetter0;
getTheadThProps: ComponentPropsGetterC;
getTheadFilterProps: ComponentPropsGetter0;
getTheadFilterTrProps: ComponentPropsGetter0;
getTheadFilterThProps: ComponentPropsGetterC;
getTbodyProps: ComponentPropsGetter0;
getTrGroupProps: ComponentPropsGetterR | ComponentPropsGetter0;
getTrProps: ComponentPropsGetterR | ComponentPropsGetter0;
getTdProps: ComponentPropsGetterRC | ComponentPropsGetterR;
getTfootProps: ComponentPropsGetter0;
getTfootTrProps: ComponentPropsGetter0;
getTfootTdProps: ComponentPropsGetterC;
getPaginationProps: ComponentPropsGetter0;
getLoadingProps: ComponentPropsGetter0;
getNoDataProps: ComponentPropsGetter0;
getResizerProps: ComponentPropsGetter0;
}
export interface ComponentProps {
TableComponent: React.ReactType;
TheadComponent: React.ReactType;
TbodyComponent: React.ReactType;
TrGroupComponent: React.ReactType;
TrComponent: React.ReactType;
ThComponent: React.ReactType;
TdComponent: React.ReactType;
TfootComponent: React.ReactType;
ExpanderComponent: React.ReactType;
AggregatedComponent: React.ReactType;
PivotValueComponent: React.ReactType;
PivotComponent: React.ReactType;
FilterComponent: React.ReactType;
PaginationComponent: React.ReactType;
PreviousComponent: React.ReactType;
NextComponent: React.ReactType;
LoadingComponent: React.ReactType;
NoDataComponent: React.ReactType;
ResizerComponent: React.ReactType;
}
export interface TextProps {
/** Default: 'Previous' */
previousText: React.ReactNode;
/** Default: 'Next' */
nextText: React.ReactNode;
/** Default: 'Loading...' */
loadingText: React.ReactNode;
/** Default: 'No rows found' */
noDataText: React.ReactNode | React.ComponentType;
/** Default: 'Page' */
pageText: React.ReactNode;
/** Default: 'of' */
ofText: React.ReactNode;
/** Default: 'rows' */
rowsText: string;
}
export interface GlobalColumn extends
Column.Basics,
Column.CellProps,
Column.FilterProps,
Column.FooterProps,
Column.HeaderProps {
}
export namespace Column {
/** Basic column props */
interface Basics {
/** Default: undefined, use table default */
sortable: boolean | undefined;
/** Default: true */
show: boolean;
/** Default: 100 */
minWidth: number;
/** Default: undefined, use table default */
resizable: boolean | undefined;
/** Default: undefined, use table default */
filterable: boolean | undefined;
/** Default: ... */
sortMethod: SortFunction | undefined;
/** Default: false */
defaultSortDesc: boolean | undefined;
/** Used to render aggregated cells. Defaults to a comma separated list of values. */
Aggregated: TableCellRenderer;
/** Used to render a pivoted cell */
Pivot: PivotRenderer;
/** Used to render the value inside of a Pivot cell */
PivotValue: TableCellRenderer;
/** Used to render the expander in both Pivot and Expander cells */
Expander: TableCellRenderer;
}
/** Configuration of a columns cell section */
interface CellProps {
/**
* Default: undefined
* A function that returns a primitive, or JSX / React Component
*
* @example 'Cell Value'
* @example ({data, column}) => <div>Cell Value</div>,
*/
Cell: TableCellRenderer;
/**
* Set the classname of the `td` element of the column
* @default string
*/
className: string;
/**
* Set the style of the `td` element of the column
* @default {}
*/
style: object;
/**
* @default () => ({})
*/
getProps: ReactTableFunction;
}
/** Configuration of a columns header section */
interface HeaderProps {
/**
* Default: undefined
* A function that returns a primitive, or JSX / React Component
*
* @example 'Header Name'
* @example ({data, column}) => <div>Header Name</div>,
*/
Header: TableCellRenderer;
/**
* Set the classname of the `th` element of the column
* @default string
*/
headerClassName: string;
/**
* Default: {}
* Set the style of the `th` element of the column
*/
headerStyle: object;
/**
* Default: (state, rowInfo, column, instance) => ({})
* A function that returns props to decorate the `th` element of the column
*/
getHeaderProps: ReactTableFunction;
}
/** Configuration of a columns footer section */
interface FooterProps {
/**
* Default: undefined
* A function that returns a primitive, or JSX / React Component
*
* @example 'Footer Name'
* @example ({data, column}) => <div>Footer Name</div>,
*/
Footer: TableCellRenderer;
/**
* Default: string
* Set the classname of the `td` element of the column's footer
*/
footerClassName: string;
/**
* Default: {}
* Set the style of the `td` element of the column's footer
*/
footerStyle: object;
/**
* Default: (state, rowInfo, column, instance) => ({})
* A function that returns props to decorate the `th` element of the column
*/
getFooterProps: ReactTableFunction;
}
/** Filtering related column props */
interface FilterProps {
/** Default: false */
filterAll: boolean;
/**
* A function returning a boolean that specifies the filtering logic for the column
* 'filter' == an object specifying which filter is being applied. Format: {id: [the filter column's id], value: [the value the user typed in the filter field],
* pivotId: [if filtering on a pivot column, the pivotId will be set to the pivot column's id and the `id` field will be set to the top level pivoting column]}
* 'row' || 'rows' == the row (or rows, if filterAll is set to true) of data supplied to the table
* 'column' == the column that the filter is on
*/
filterMethod: FilterFunction | DefaultFilterFunction;
/** Default: false */
hideFilter: boolean;
/** Default: ... */
Filter: FilterRender;
}
}
export interface ExpanderDefaults {
/** Default: false */
sortable: boolean;
/** Default: false */
resizable: boolean;
/** Default: false */
filterable: boolean;
/** Default: 35 */
width: number;
}
export interface PivotDefaults {
/** Will be overriden in methods.js to display ExpanderComponent */
render: TableCellRenderer;
}
export interface Column<D = any> extends
Partial<Column.Basics>,
Partial<Column.CellProps>,
Partial<Column.FilterProps>,
Partial<Column.FooterProps>,
Partial<Column.HeaderProps> {
/**
* Property name as string or Accessor
* @example: 'myProperty'
* @example ["a.b", "c"]
* @example ["a", "b", "c"]
* @example {"a": {"b": {"c": $}}}
* @example (row) => row.propertyName
*/
accessor?: Accessor<D>;
/**
* Conditional - A unique ID is required if the accessor is not a string or if you would like to override the column name used in server-side calls
* @example 'myProperty'
*/
id?: string;
/**
* No description
* @example (values, rows) => _.round(_.mean(values))
* @example (values, rows) => _.sum(values)
*/
aggregate?: Aggregator;
/**
* Default: undefined - A hardcoded width for the column. This overrides both min and max width options
*/
width?: number;
/**
* Default: undefined - A maximum width for this column.
* @default undefined
*/
maxWidth?: number;
/**
* Turns this column into a special column for specifying expander and pivot column options.
* If this option is true and there is NOT a pivot column, the `expanderDefaults` options will be applied on top of the column options.
* If this option is true and there IS a pivot column, the `pivotDefaults` options will be applied on top of the column options.
* Adding a column with the `expander` option set will allow you to rearrange expander and pivot column orderings in the table.
* It will also let you specify rendering of the header (and header group if this special column is placed in the `columns` option of another column) and the rendering of the expander itself.
*/
expander?: boolean;
/** Header Groups only */
columns?: Array<Column<D>>;
/**
* Turns this column into a special column for specifying pivot position in your column definitions.
* The `pivotDefaults` options will be applied on top of this column's options.
* It will also let you specify rendering of the header (and header group if this special column is placed in the `columns` option of another column)
*/
pivot?: boolean;
}
export interface ColumnRenderProps<D = any> {
/** Sorted data. */
data: D[];
/** The column. */
column: Column<D>;
}
export interface RowRenderProps extends Partial<RowInfo> {
/** Whenever the current row is expanded */
isExpanded?: boolean;
/** The current cell value */
value?: any;
}
export interface RowInfo {
/** Materialized row of data */
row: any;
/** The post-accessed values from the original row */
rowValues: any;
/** The index of the row */
index: number;
/** The index of the row relative to the current page */
viewIndex: number;
/** The size of the page */
pageSize: number;
/** The index of page */
page: number;
/** The nesting depth (zero-indexed) */
level: number;
/** The nesting path of the row */
nestingPath: number[];
/** A boolean stating if the row is an aggregation row */
aggregated: boolean;
/** A boolean stating if the row is grouped by Pivot */
groupedByPivot: boolean;
/** An array of any expandable sub-rows contained in this row */
subRows: any[];
/** Original object passed to row */
original: any;
}
export interface CellInfo extends RowInfo, Pick<ControlledStateOverrideProps, "resized"> {
/* true if this row is expanded */
isExpanded: boolean;
/* the cell's column */
column: Column;
/* materialized value of the cell */
value: any;
/* true if the column is pivoted */
pivoted: boolean;
/* true if this column is an expander */
expander: boolean;
/* true if the column is visible */
show: boolean;
/* resolved width of the cell */
width: number;
/* resolved maxWidth of the cell */
maxWidth: number;
/* resolved tdProps from `getTdProps` for this cell */
tdProps: any;
/* resolved column props from 'getProps' for this cell's column */
columnProps: any;
/* resolved array of classes for the cell */
classes: string[];
/* resolved styles for this cell */
styles: object;
}
export interface FinalState<D = any> extends TableProps<D> {
frozen: boolean;
startRow: number;
endRow: number;
padRows: number;
hasColumnFooter: boolean;
hasHeaderGroups: boolean;
canPrevious: boolean;
canNext: boolean;
rowMinWidth: number;
allVisibleColumns: Array<Column<D>>;
allDecoratedColumns: Array<Column<D>>;
pageRows: DerivedDataObject[];
resolvedData: DerivedDataObject[];
sortedData: DerivedDataObject[];
headerGroups: any[];
}
export const ReactTableDefaults: TableProps;
export default class ReactTable<D> extends React.Component<Partial<TableProps<D>>> { }
export interface Instance<D = any> extends ReactTable<D> {
context: any;
props: Partial<TableProps<D>>;
refs: any;
state: FinalState<D>;
filterColumn(...props: any[]): any;
filterData(...props: any[]): any;
fireFetchData(...props: any[]): any;
getDataModel(...props: any[]): any;
getMinRows(...props: any[]): any;
getPropOrState(...props: any[]): any;
getResolvedState(...props: any[]): any;
getSortedData(...props: any[]): any;
getStateOrProp(...props: any[]): any;
onPageChange: PageChangeFunction;
onPageSizeChange: PageSizeChangeFunction;
resizeColumnEnd(...props: any[]): any;
resizeColumnMoving(...props: any[]): any;
resizeColumnStart(...props: any[]): any;
sortColumn(...props: any[]): any;
sortData(...props: any[]): any;
}
}