import { HTMLAttributes, ReactNode } from 'react';
import { SurfaceShapeType, SizeType } from '../const/types.js';
export type TableKey = string | number;
export interface SortState {
key: string;
order: null | "desc" | "asc";
}
export interface TableEllipsisOptions {
/** 截断到第几行,默认 `1`(单行不换行) */
rows?: number;
/**
* 悬停提示。默认用被截断的那段文本;传字符串或节点换成指定内容;`false` 关掉提示。
* 只有真的被截断才会弹,没截断的格子不会多出气泡。
*/
tooltip?: boolean | ReactNode;
}
export interface Column> {
key: string;
title: ReactNode;
width?: number;
fixed?: "left" | "right";
sorter?: boolean | ((state: SortState) => void);
/**
* 内容超出列宽时显示省略号。`true` 单行、数字或 `rows` 是多行,`tooltip` 定制悬停提示。
* 表格级 `ellipsis` 打开时,这一列写 `false` 可以单独关掉。
*/
ellipsis?: boolean | number | TableEllipsisOptions;
render?(value: unknown, record: T, rowIndex: number, column: Column): ReactNode;
renderHeader?(column: Column, index: number): ReactNode;
colSpan?: number | ((record: T, index: number) => number);
rowSpan?: number | ((record: T, index: number) => number);
children?: Column[];
}
export interface TableProps> extends Omit, "onSelect" | "defaultValue" | "defaultChecked"> {
data?: T[];
columns?: Column[];
/**
* 给所有列打开省略号,省得一列列写 `ellipsis`。
* `true` 单行、数字或 `rows` 是多行,`tooltip` 定制悬停提示;某一列想留完整内容就在那列写 `ellipsis: false`。
*/
ellipsis?: boolean | number | TableEllipsisOptions;
selectedKeys?: TableKey[];
disabledKeys?: TableKey[];
rowKey?: string | ((record: T) => TableKey);
childrenColumnName?: string;
expandedKeys?: TableKey[];
expandAllRows?: boolean;
expandRowByClick?: boolean;
indentSize?: number;
scroll?: {
x?: number | string;
y?: number | string;
};
size?: SizeType;
striped?: boolean;
bordered?: boolean;
shape?: SurfaceShapeType;
checkable?: boolean;
loading?: boolean;
emptyText?: string;
header?: ReactNode;
footer?: ReactNode;
/** 开启虚拟滚动,用于高效渲染大量行 */
virtual?: boolean;
/** 虚拟滚动时每行的高度,单位 `px` */
itemHeight?: number;
/** 虚拟滚动时视口外额外渲染的行数量 */
overscan?: number;
/** 隐藏的列 key 集合 */
hiddenColumnKeys?: (string | number)[];
onSort?: (state: SortState) => void;
onRowClick?: (record: T, index: number) => void;
onSelect?: (record: T, selected: boolean, selectedKeys: TableKey[]) => void;
onSelectAll?: (selected: boolean, selectedKeys: TableKey[]) => void;
onSelectedKeysChange?: (selectedKeys: TableKey[]) => void;
onExpand?: (expanded: boolean, record: T) => void;
onExpandedKeysChange?: (expandedKeys: TableKey[]) => void;
}
export interface TableTreeRow {
record: T;
depth: number;
hasChildren: boolean;
}