import { TableProps as RcTableProps } from 'rc-table/es/Table'; import { ColumnType as RcColumnType, GetRowKey } from 'rc-table/es/interface'; import { CheckboxProps } from '../Checkbox/interfaces.js'; import { PaginationProps } from '../Pagination/interfaces.js'; import { SpinProps } from '../Spin/interfaces.js'; import { DragEndEvent } from '@dnd-kit/core'; import type { TooltipProps } from '../Tooltip/interfaces.js'; export type { GetRowKey }; export type SortOrder = 'desc' | 'asc' | null; export interface ControlledSorter { columnKey: Key; order: SortOrder; } export interface SorterResult { column?: ColumnType; order?: SortOrder; field?: Key | readonly Key[]; columnKey?: Key; } export type PaginationParam = { current: number; pageSize: number; total: number; }; export type Key = React.Key; export type CompareFn = (a: T, b: T, sortOrder?: SortOrder) => number; export interface ColumnType extends RcColumnType { sorter?: boolean | CompareFn; defaultSortOrder?: SortOrder; sortDirections?: SortOrder[]; showSorterTooltip?: boolean | TooltipProps; } export type ColumnsType = ColumnType[]; export type SizeType = 'small' | 'middle' | 'large'; export interface ChangeEventInfo { sorter: SorterResult; pagination: { current?: number; pageSize?: number; total?: number; }; resetPagination: Function; } export type TableAction = 'paginate' | 'sort' | 'filter'; export interface TableExtra { action: TableAction; } export type SelectionSelectFn = (record: T, selected: boolean, selectedRows: T[], nativeEvent: Event) => void; export interface TableRowSelection { /** Keep the selection keys in list even the key not exist in `dataSource` anymore */ preserveSelectedRowKeys?: boolean; selectedRowKeys?: Key[]; defaultSelectedRowKeys?: Key[]; onChange?: (selectedRowKeys: Key[], selectedRows: T[]) => void; getCheckboxProps?: (record: T) => Partial>; getTitleCheckboxProps?: () => Partial>; onSelect?: SelectionSelectFn; onSelectMultiple?: (selected: boolean, selectedRows: T[], changeRows: T[]) => void; onSelectNone?: () => void; hideSelectAll?: boolean; fixed?: boolean; columnWidth?: string | number; columnTitle?: string | React.ReactNode; checkStrictly?: boolean; } export type TransformColumns = (columns: ColumnsType) => ColumnsType; export interface TableLocale { filterTitle?: string; filterConfirm?: React.ReactNode; filterReset?: React.ReactNode; filterEmptyText?: React.ReactNode; filterCheckall?: React.ReactNode; filterSearchPlaceholder?: string; emptyText?: React.ReactNode | (() => React.ReactNode); selectAll?: React.ReactNode; selectNone?: React.ReactNode; selectInvert?: React.ReactNode; selectionAll?: React.ReactNode; sortTitle?: string; expand?: string; collapse?: string; triggerDesc?: string; triggerAsc?: string; cancelSort?: string; autoRefreshButton?: string; } export interface TableProps extends Omit, 'transformColumns' | 'internalHooks' | 'internalRefs' | 'data' | 'columns' | 'emptyText' | 'components'> { dataSource?: RcTableProps['data']; columns?: ColumnsType; pagination?: false | TablePaginationConfig; loading?: boolean | SpinProps; size?: SizeType; bordered?: boolean; onChange?: (pagination: Partial, sorter: SorterResult, extra: TableExtra) => void; rowSelection?: TableRowSelection; sortDirections?: SortOrder[]; sorter?: ControlledSorter | null; dndRows?: boolean; onDragEnd?: (event: DragEndEvent) => void; locale?: TableLocale; showSorterTooltip?: boolean | TooltipProps; } export type TablePaginationPosition = 'topLeft' | 'topCenter' | 'topRight' | 'bottomLeft' | 'bottomCenter' | 'bottomRight'; export interface TablePaginationConfig extends PaginationProps { position?: TablePaginationPosition[]; }