@tanstack/table-core
Version:
Headless UI for building powerful tables & datagrids for TS/JS.
362 lines (316 loc) • 9.72 kB
text/typescript
import { CoreOptions, CoreTableState, CoreInstance } from './core/table'
import {
VisibilityInstance,
VisibilityTableState,
VisibilityColumn as ColumnVisibilityColumn,
VisibilityOptions,
VisibilityColumnDef,
VisibilityRow,
} from './features/ColumnVisibility'
import {
ColumnOrderColumn,
ColumnOrderInstance,
ColumnOrderOptions,
ColumnOrderTableState,
} from './features/ColumnOrdering'
import {
ColumnPinningColumn,
ColumnPinningColumnDef,
ColumnPinningInstance,
ColumnPinningOptions,
ColumnPinningRow,
ColumnPinningTableState,
} from './features/ColumnPinning'
import {
RowPinningInstance,
RowPinningOptions,
RowPinningRow,
RowPinningTableState,
} from './features/RowPinning'
import {
CoreHeader,
CoreHeaderGroup,
HeaderContext,
HeadersInstance,
} from './core/headers'
import { FacetedColumn, FacetedOptions } from './features/ColumnFaceting'
import { GlobalFacetingInstance } from './features/GlobalFaceting'
import {
ColumnFiltersColumn,
ColumnFiltersColumnDef,
ColumnFiltersInstance,
ColumnFiltersOptions,
ColumnFiltersRow,
ColumnFiltersTableState,
} from './features/ColumnFiltering'
import {
GlobalFilterColumn,
GlobalFilterColumnDef,
GlobalFilterInstance,
GlobalFilterOptions,
GlobalFilterTableState,
} from './features/GlobalFiltering'
import {
SortingColumn,
SortingColumnDef,
SortingInstance,
SortingOptions,
SortingTableState,
} from './features/RowSorting'
import {
GroupingCell,
GroupingColumn,
GroupingColumnDef,
GroupingInstance,
GroupingOptions,
GroupingRow,
GroupingTableState,
} from './features/ColumnGrouping'
import {
ExpandedInstance,
ExpandedOptions,
ExpandedTableState,
ExpandedRow,
} from './features/RowExpanding'
import {
ColumnSizingColumn,
ColumnSizingColumnDef,
ColumnSizingHeader,
ColumnSizingInstance,
ColumnSizingOptions,
ColumnSizingTableState,
} from './features/ColumnSizing'
import {
PaginationInitialTableState,
PaginationInstance,
PaginationOptions,
PaginationTableState,
} from './features/RowPagination'
import {
RowSelectionInstance,
RowSelectionOptions,
RowSelectionRow,
RowSelectionTableState,
} from './features/RowSelection'
import { CoreRow } from './core/row'
import { PartialKeys, UnionToIntersection } from './utils'
import { CellContext, CoreCell } from './core/cell'
import { CoreColumn } from './core/column'
export interface TableFeature<TData extends RowData = any> {
createCell?: (
cell: Cell<TData, unknown>,
column: Column<TData>,
row: Row<TData>,
table: Table<TData>
) => void
createColumn?: (column: Column<TData, unknown>, table: Table<TData>) => void
createHeader?: (header: Header<TData, unknown>, table: Table<TData>) => void
createRow?: (row: Row<TData>, table: Table<TData>) => void
createTable?: (table: Table<TData>) => void
getDefaultColumnDef?: () => Partial<ColumnDef<TData, unknown>>
getDefaultOptions?: (
table: Table<TData>
) => Partial<TableOptionsResolved<TData>>
getInitialState?: (initialState?: InitialTableState) => Partial<TableState>
}
export interface TableMeta<TData extends RowData> {}
export interface ColumnMeta<TData extends RowData, TValue> {}
export interface FilterMeta {}
export interface FilterFns {}
export interface SortingFns {}
export interface AggregationFns {}
export type Updater<T> = T | ((old: T) => T)
export type OnChangeFn<T> = (updaterOrValue: Updater<T>) => void
export type RowData = unknown | object | any[]
export type AnyRender = (Comp: any, props: any) => any
export interface Table<TData extends RowData>
extends CoreInstance<TData>,
HeadersInstance<TData>,
VisibilityInstance<TData>,
ColumnOrderInstance<TData>,
ColumnPinningInstance<TData>,
RowPinningInstance<TData>,
ColumnFiltersInstance<TData>,
GlobalFilterInstance<TData>,
GlobalFacetingInstance<TData>,
SortingInstance<TData>,
GroupingInstance<TData>,
ColumnSizingInstance,
ExpandedInstance<TData>,
PaginationInstance<TData>,
RowSelectionInstance<TData> {}
interface FeatureOptions<TData extends RowData>
extends VisibilityOptions,
ColumnOrderOptions,
ColumnPinningOptions,
RowPinningOptions<TData>,
FacetedOptions<TData>,
ColumnFiltersOptions<TData>,
GlobalFilterOptions<TData>,
SortingOptions<TData>,
GroupingOptions,
ExpandedOptions<TData>,
ColumnSizingOptions,
PaginationOptions,
RowSelectionOptions<TData> {}
export interface TableOptionsResolved<TData extends RowData>
extends CoreOptions<TData>,
FeatureOptions<TData> {}
export interface TableOptions<TData extends RowData>
extends PartialKeys<
TableOptionsResolved<TData>,
'state' | 'onStateChange' | 'renderFallbackValue'
> {}
export interface TableState
extends CoreTableState,
VisibilityTableState,
ColumnOrderTableState,
ColumnPinningTableState,
RowPinningTableState,
ColumnFiltersTableState,
GlobalFilterTableState,
SortingTableState,
ExpandedTableState,
GroupingTableState,
ColumnSizingTableState,
PaginationTableState,
RowSelectionTableState {}
interface CompleteInitialTableState
extends CoreTableState,
VisibilityTableState,
ColumnOrderTableState,
ColumnPinningTableState,
RowPinningTableState,
ColumnFiltersTableState,
GlobalFilterTableState,
SortingTableState,
ExpandedTableState,
GroupingTableState,
ColumnSizingTableState,
PaginationInitialTableState,
RowSelectionTableState {}
export interface InitialTableState extends Partial<CompleteInitialTableState> {}
export interface Row<TData extends RowData>
extends CoreRow<TData>,
VisibilityRow<TData>,
ColumnPinningRow<TData>,
RowPinningRow,
ColumnFiltersRow<TData>,
GroupingRow,
RowSelectionRow,
ExpandedRow {}
export interface RowModel<TData extends RowData> {
rows: Row<TData>[]
flatRows: Row<TData>[]
rowsById: Record<string, Row<TData>>
}
export type AccessorFn<TData extends RowData, TValue = unknown> = (
originalRow: TData,
index: number
) => TValue
export type ColumnDefTemplate<TProps extends object> =
| string
| ((props: TProps) => any)
export type StringOrTemplateHeader<TData, TValue> =
| string
| ColumnDefTemplate<HeaderContext<TData, TValue>>
export interface StringHeaderIdentifier {
header: string
id?: string
}
export interface IdIdentifier<TData extends RowData, TValue> {
id: string
header?: StringOrTemplateHeader<TData, TValue>
}
type ColumnIdentifiers<TData extends RowData, TValue> =
| IdIdentifier<TData, TValue>
| StringHeaderIdentifier
//
interface ColumnDefExtensions<TData extends RowData, TValue = unknown>
extends VisibilityColumnDef,
ColumnPinningColumnDef,
ColumnFiltersColumnDef<TData>,
GlobalFilterColumnDef,
SortingColumnDef<TData>,
GroupingColumnDef<TData, TValue>,
ColumnSizingColumnDef {}
export interface ColumnDefBase<TData extends RowData, TValue = unknown>
extends ColumnDefExtensions<TData, TValue> {
getUniqueValues?: AccessorFn<TData, unknown[]>
footer?: ColumnDefTemplate<HeaderContext<TData, TValue>>
cell?: ColumnDefTemplate<CellContext<TData, TValue>>
meta?: ColumnMeta<TData, TValue>
}
//
export interface IdentifiedColumnDef<TData extends RowData, TValue = unknown>
extends ColumnDefBase<TData, TValue> {
id?: string
header?: StringOrTemplateHeader<TData, TValue>
}
export type DisplayColumnDef<
TData extends RowData,
TValue = unknown,
> = ColumnDefBase<TData, TValue> & ColumnIdentifiers<TData, TValue>
interface GroupColumnDefBase<TData extends RowData, TValue = unknown>
extends ColumnDefBase<TData, TValue> {
columns?: ColumnDef<TData, any>[]
}
export type GroupColumnDef<
TData extends RowData,
TValue = unknown,
> = GroupColumnDefBase<TData, TValue> & ColumnIdentifiers<TData, TValue>
export interface AccessorFnColumnDefBase<
TData extends RowData,
TValue = unknown,
> extends ColumnDefBase<TData, TValue> {
accessorFn: AccessorFn<TData, TValue>
}
export type AccessorFnColumnDef<
TData extends RowData,
TValue = unknown,
> = AccessorFnColumnDefBase<TData, TValue> & ColumnIdentifiers<TData, TValue>
export interface AccessorKeyColumnDefBase<
TData extends RowData,
TValue = unknown,
> extends ColumnDefBase<TData, TValue> {
id?: string
accessorKey: (string & {}) | keyof TData
}
export type AccessorKeyColumnDef<
TData extends RowData,
TValue = unknown,
> = AccessorKeyColumnDefBase<TData, TValue> &
Partial<ColumnIdentifiers<TData, TValue>>
export type AccessorColumnDef<TData extends RowData, TValue = unknown> =
| AccessorKeyColumnDef<TData, TValue>
| AccessorFnColumnDef<TData, TValue>
//
export type ColumnDef<TData extends RowData, TValue = unknown> =
| DisplayColumnDef<TData, TValue>
| GroupColumnDef<TData, TValue>
| AccessorColumnDef<TData, TValue>
export type ColumnDefResolved<
TData extends RowData,
TValue = unknown,
> = Partial<UnionToIntersection<ColumnDef<TData, TValue>>> & {
accessorKey?: string
}
export interface Column<TData extends RowData, TValue = unknown>
extends CoreColumn<TData, TValue>,
ColumnVisibilityColumn,
ColumnPinningColumn,
FacetedColumn<TData>,
ColumnFiltersColumn<TData>,
GlobalFilterColumn,
SortingColumn<TData>,
GroupingColumn<TData>,
ColumnSizingColumn,
ColumnOrderColumn {}
export interface Cell<TData extends RowData, TValue>
extends CoreCell<TData, TValue>,
GroupingCell {}
export interface Header<TData extends RowData, TValue>
extends CoreHeader<TData, TValue>,
ColumnSizingHeader {}
export interface HeaderGroup<TData extends RowData>
extends CoreHeaderGroup<TData> {}