import { ReactNode } from "react"; import { PaginationState, Row, HeaderGroup, SortingFn, OnChangeFn, SortingState } from "@tanstack/react-table"; import { BaseComponentSizes, ClassName } from "@helpers/types"; import { TPaginationVariant } from "@components/Pagination/Pagination.interface"; export interface ITableHeader extends ITableItem { isSortable?: boolean; name: string; sortingFn?: SortingFn; } export type CellWithCustomSortingValue = { cellContent: ReactNode; sortingValue: unknown; }; export interface ITableItem extends Record { id: string; className?: string; } export interface IConditionalStylesConfig { condition: (row: ITableItem) => boolean; rowClassName?: string; cellClassName?: string; } export interface IConditionalStyles { conditionalStylesConfig?: IConditionalStylesConfig[]; } export interface TableProps extends ITableBuiltInPaginationProps, ClassName, IConditionalStyles { columns: ITableHeader[]; items: TableItem[]; borderless?: boolean; zebraRows?: boolean; contentAlignment?: TTableContentAlignment; pageSize?: number; footer?: ReactNode; layoutFixed?: boolean; headerCellClassName?: string; manualSorting?: boolean; customPagination?: ReactNode; paginationState?: PaginationState; withBuiltInPagination?: boolean; withRowSelection?: boolean; rowSelectionColumnClassName?: string; onRowsSelect?(rows: ITableItem[]): void; onSortingChange?: OnChangeFn; sortingState?: SortingState; headClassName?: string; } export interface ITableBodyProps extends ITableStylesProps, IConditionalStyles { tableRows: Row[]; isPaginationMode: boolean; rowCellClassName?: string; getColumnClassName(columnId: string): string; } export interface ITableHeaderProps extends ITableStylesProps { headerGroups: HeaderGroup[]; headerClassName?: string; headClassName?: string; getColumnClassName(columnId: string): string; } export interface ITableStylesProps { borderless?: boolean; zebraRows?: boolean; } export interface ITableBuiltInPaginationProps { paginationPrevButtonText?: string; paginationNextButtonText?: string; paginationVariant?: TPaginationVariant; paginationSize?: BaseComponentSizes; } export type TTableContentAlignment = "left" | "right" | "center";