import { ReactNode } from 'react' ; import { MarginProps } from '../../mixins' ; import { PaginationProps } from '../Pagination' ; import { TableColumnDisplayProps } from './mixins' ; export interface TableSelectable < T > { selectedItems : T [ ] ; onSelectionChange ( selectedItems ) : void ; } export type TableSortDirection = 'ASC' | 'DESC' ; export interface TableSortable < T > { direction : TableSortDirection ; columnHash ? : string ; onSort ( columnHash , direction , column ) : void ; } export interface TableItem { id ? : string | number ; [ key ] : any ; } export interface TableColumn < T > extends TableColumnDisplayProps { align ? : 'left' | 'center' | 'right' ; hash : string ; header : string ; tooltip ? : string ; hideHeader ? : boolean ; isSortable ? : boolean ; render : React . ComponentType < T > | ( ( props : T & { children ? : ReactNode ; } , context ? : any ) => string | number ) ; verticalAlign ? : 'top' | 'middle' ; width ? : number | string ; withPadding ? : boolean ; } export type TablePaginationProps = Omit < PaginationProps , keyof MarginProps > ; export interface TableProps < T > extends React . TableHTMLAttributes < HTMLTableElement > { actions ? : React . ReactNode ; columns : Array < TableColumn < T > > ; emptyComponent ? : React . ReactElement ; headerless ? : boolean ; itemName ? : string ; items : T [ ] ; keyField ? : string ; onRowDrop ? ( from , to ) : void ; pagination ? : TablePaginationProps ; selectable ? : TableSelectable < T > ; sortable ? : TableSortable < T > ; stickyHeader ? : boolean ; }