UNPKG

7.51 kBTypeScriptView Raw
1import type * as React from 'react';
2import type { DeepNamePath } from './namePathType';
3/**
4 * ColumnType which applied in antd: https://ant.design/components/table-cn/#Column
5 * - defaultSortOrder
6 * - filterDropdown
7 * - filterDropdownVisible
8 * - filtered
9 * - filteredValue
10 * - filterIcon
11 * - filterMultiple
12 * - filters
13 * - sorter
14 * - sortOrder
15 * - sortDirections
16 * - onFilter
17 * - onFilterDropdownVisibleChange
18 */
19export type Key = React.Key;
20export type FixedType = 'left' | 'right' | boolean;
21export type DefaultRecordType = Record<string, any>;
22export type TableLayout = 'auto' | 'fixed';
23export type ScrollConfig = {
24 index?: number;
25 key?: Key;
26 top?: number;
27};
28export type Reference = {
29 nativeElement: HTMLDivElement;
30 scrollTo: (config: ScrollConfig) => void;
31};
32export type RowClassName<RecordType> = (record: RecordType, index: number, indent: number) => string;
33export interface CellType<RecordType> {
34 key?: Key;
35 className?: string;
36 style?: React.CSSProperties;
37 children?: React.ReactNode;
38 column?: ColumnsType<RecordType>[number];
39 colSpan?: number;
40 rowSpan?: number;
41 /** Only used for table header */
42 hasSubColumns?: boolean;
43 colStart?: number;
44 colEnd?: number;
45}
46export interface RenderedCell<RecordType> {
47 props?: CellType<RecordType>;
48 children?: React.ReactNode;
49}
50export type Direction = 'ltr' | 'rtl';
51export type SpecialString<T> = T | (string & {});
52export type DataIndex<T = any> = DeepNamePath<T> | SpecialString<T> | number | (SpecialString<T> | number)[];
53export type CellEllipsisType = {
54 showTitle?: boolean;
55} | boolean;
56export type ColScopeType = 'col' | 'colgroup';
57export type RowScopeType = 'row' | 'rowgroup';
58export type ScopeType = ColScopeType | RowScopeType;
59interface ColumnSharedType<RecordType> {
60 title?: React.ReactNode;
61 key?: Key;
62 className?: string;
63 hidden?: boolean;
64 fixed?: FixedType;
65 onHeaderCell?: GetComponentProps<ColumnsType<RecordType>[number]>;
66 ellipsis?: CellEllipsisType;
67 align?: AlignType;
68 rowScope?: RowScopeType;
69}
70export interface ColumnGroupType<RecordType> extends ColumnSharedType<RecordType> {
71 children: ColumnsType<RecordType>;
72}
73export type AlignType = 'start' | 'end' | 'left' | 'right' | 'center' | 'justify' | 'match-parent';
74export interface ColumnType<RecordType> extends ColumnSharedType<RecordType> {
75 colSpan?: number;
76 dataIndex?: DataIndex<RecordType>;
77 render?: (value: any, record: RecordType, index: number) => React.ReactNode | RenderedCell<RecordType>;
78 shouldCellUpdate?: (record: RecordType, prevRecord: RecordType) => boolean;
79 rowSpan?: number;
80 width?: number | string;
81 minWidth?: number;
82 onCell?: GetComponentProps<RecordType>;
83 /** @deprecated Please use `onCell` instead */
84 onCellClick?: (record: RecordType, e: React.MouseEvent<HTMLElement>) => void;
85}
86export type ColumnsType<RecordType = unknown> = readonly (ColumnGroupType<RecordType> | ColumnType<RecordType>)[];
87export type GetRowKey<RecordType> = (record: RecordType, index?: number) => Key;
88export interface StickyOffsets {
89 left: readonly number[];
90 right: readonly number[];
91 isSticky?: boolean;
92}
93export type GetComponentProps<DataType> = (data: DataType, index?: number) => React.HTMLAttributes<any> & React.TdHTMLAttributes<any>;
94type Component<P> = React.ComponentType<P> | React.ForwardRefExoticComponent<P> | React.FC<P> | keyof React.ReactHTML;
95export type CustomizeComponent = Component<any>;
96export type OnCustomizeScroll = (info: {
97 currentTarget?: HTMLElement;
98 scrollLeft?: number;
99}) => void;
100export type CustomizeScrollBody<RecordType> = (data: readonly RecordType[], info: {
101 scrollbarSize: number;
102 ref: React.Ref<{
103 scrollLeft: number;
104 scrollTo?: (scrollConfig: ScrollConfig) => void;
105 }>;
106 onScroll: OnCustomizeScroll;
107}) => React.ReactNode;
108export interface TableComponents<RecordType> {
109 table?: CustomizeComponent;
110 header?: {
111 table?: CustomizeComponent;
112 wrapper?: CustomizeComponent;
113 row?: CustomizeComponent;
114 cell?: CustomizeComponent;
115 };
116 body?: CustomizeScrollBody<RecordType> | {
117 wrapper?: CustomizeComponent;
118 row?: CustomizeComponent;
119 cell?: CustomizeComponent;
120 };
121}
122export type GetComponent = (path: readonly string[], defaultComponent?: CustomizeComponent) => CustomizeComponent;
123export type ExpandableType = false | 'row' | 'nest';
124export interface LegacyExpandableProps<RecordType> {
125 /** @deprecated Use `expandable.expandedRowKeys` instead */
126 expandedRowKeys?: Key[];
127 /** @deprecated Use `expandable.defaultExpandedRowKeys` instead */
128 defaultExpandedRowKeys?: Key[];
129 /** @deprecated Use `expandable.expandedRowRender` instead */
130 expandedRowRender?: ExpandedRowRender<RecordType>;
131 /** @deprecated Use `expandable.expandRowByClick` instead */
132 expandRowByClick?: boolean;
133 /** @deprecated Use `expandable.expandIcon` instead */
134 expandIcon?: RenderExpandIcon<RecordType>;
135 /** @deprecated Use `expandable.onExpand` instead */
136 onExpand?: (expanded: boolean, record: RecordType) => void;
137 /** @deprecated Use `expandable.onExpandedRowsChange` instead */
138 onExpandedRowsChange?: (expandedKeys: Key[]) => void;
139 /** @deprecated Use `expandable.defaultExpandAllRows` instead */
140 defaultExpandAllRows?: boolean;
141 /** @deprecated Use `expandable.indentSize` instead */
142 indentSize?: number;
143 /** @deprecated Use `expandable.expandIconColumnIndex` instead */
144 expandIconColumnIndex?: number;
145 /** @deprecated Use `expandable.expandedRowClassName` instead */
146 expandedRowClassName?: RowClassName<RecordType>;
147 /** @deprecated Use `expandable.childrenColumnName` instead */
148 childrenColumnName?: string;
149 title?: PanelRender<RecordType>;
150}
151export type ExpandedRowRender<ValueType> = (record: ValueType, index: number, indent: number, expanded: boolean) => React.ReactNode;
152export interface RenderExpandIconProps<RecordType> {
153 prefixCls: string;
154 expanded: boolean;
155 record: RecordType;
156 expandable: boolean;
157 onExpand: TriggerEventHandler<RecordType>;
158}
159export type RenderExpandIcon<RecordType> = (props: RenderExpandIconProps<RecordType>) => React.ReactNode;
160export interface ExpandableConfig<RecordType> {
161 expandedRowKeys?: readonly Key[];
162 defaultExpandedRowKeys?: readonly Key[];
163 expandedRowRender?: ExpandedRowRender<RecordType>;
164 columnTitle?: React.ReactNode;
165 expandRowByClick?: boolean;
166 expandIcon?: RenderExpandIcon<RecordType>;
167 onExpand?: (expanded: boolean, record: RecordType) => void;
168 onExpandedRowsChange?: (expandedKeys: readonly Key[]) => void;
169 defaultExpandAllRows?: boolean;
170 indentSize?: number;
171 /** @deprecated Please use `EXPAND_COLUMN` in `columns` directly */
172 expandIconColumnIndex?: number;
173 showExpandColumn?: boolean;
174 expandedRowClassName?: string | RowClassName<RecordType>;
175 childrenColumnName?: string;
176 rowExpandable?: (record: RecordType) => boolean;
177 columnWidth?: number | string;
178 fixed?: FixedType;
179}
180export type PanelRender<RecordType> = (data: readonly RecordType[]) => React.ReactNode;
181export type TriggerEventHandler<RecordType> = (record: RecordType, event: React.MouseEvent<HTMLElement>) => void;
182export interface TableSticky {
183 offsetHeader?: number;
184 offsetSummary?: number;
185 offsetScroll?: number;
186 getContainer?: () => Window | HTMLElement;
187}
188export {};