import React, { ComponentType, ReactNode } from 'react'; import { CellProps, HeaderGroup, Column, IdType, HeaderProps, UseTableColumnOptions, UseFiltersColumnOptions, UseSortByColumnOptions, UseRowSelectOptions, Renderer, UseFiltersColumnProps, UseSortByColumnProps, UseRowSelectInstanceProps, } from 'react-table'; export interface ITableColumnProps { accessor?: string | IdType | never; id?: string; Header?: Renderer>; Cell?: CellComponent; sortable?: boolean; Filter?: FilterComponent; minWidth?: string | number; maxWidth?: string | number; } export interface TableProps { columns: ITableColumnProps[]; pagination?: 'pages' | 'infinite-scroll'; onPageChange?: (pageSize: number, page: number) => void; pageCount?: number; pageSize?: number; toolbar?: boolean; loading?: boolean; emptyRowsPlaceholder?: ReactNode; selection?: 'single' | 'multi'; onRowSelected?: (rowIds: Record) => void; selectedRowIds?: Record; expandable?: boolean; renderExpandedComponent?: (data: T, index: number) => React.ReactNode; tableHeader?: boolean; data: T[]; totalData: number; rowKey: keyof T | string; isMultiSort?: boolean; sortBy?: TableSort[]; onSortChange?: (sortBy: TableSort[]) => void; filters?: TableFilter[]; onFilterChange?: (filters: TableFilter[]) => void; } export declare type CellComponent = Renderer>; export declare type FilterComponent = ComponentType<{ value: T | null; setFilterValue: (value: T | null) => void; closePopup?: () => void; }>; export interface TableSort { id: string; desc?: boolean; } export interface TableFilter { id: string; value: any; } export interface TableColumnFilterProps { type: 'text' | 'select'; filterBy: string; } export declare type TableColumnProps = HeaderGroup & UseSortByColumnProps & UseFiltersColumnProps & UseRowSelectInstanceProps & { Filter: FilterComponent; }; export declare type TableColumnOptions = Column & UseTableColumnOptions & UseSortByColumnOptions & UseFiltersColumnOptions & UseRowSelectOptions;