interface.d.ts 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. import type * as React from 'react';
  2. import type { Reference } from 'rc-table';
  3. import type { FixedType, GetComponentProps, ColumnType as RcColumnType, RenderedCell as RcRenderedCell } from 'rc-table/lib/interface';
  4. import { ExpandableConfig, GetRowKey } from 'rc-table/lib/interface';
  5. import type { Breakpoint } from '../_util/responsiveObserver';
  6. import type { AnyObject } from '../_util/type';
  7. import type { CheckboxProps } from '../checkbox';
  8. import type { DropdownProps } from '../dropdown';
  9. import type { PaginationProps } from '../pagination';
  10. import type { TooltipProps } from '../tooltip';
  11. import type { INTERNAL_SELECTION_ITEM } from './hooks/useSelection';
  12. import type { InternalTableProps, TableProps } from './InternalTable';
  13. export type RefTable = <RecordType = AnyObject>(props: React.PropsWithChildren<TableProps<RecordType>> & React.RefAttributes<Reference>) => React.ReactElement;
  14. export type RefInternalTable = <RecordType = AnyObject>(props: React.PropsWithChildren<InternalTableProps<RecordType>> & React.RefAttributes<Reference>) => React.ReactElement;
  15. export { ExpandableConfig, GetRowKey };
  16. export type Key = React.Key;
  17. export type SafeKey = Exclude<Key, bigint>;
  18. export type RowSelectionType = 'checkbox' | 'radio';
  19. export type SelectionItemSelectFn = (currentRowKeys: Key[]) => void;
  20. export type ExpandType = null | 'row' | 'nest';
  21. export interface TableLocale {
  22. filterTitle?: string;
  23. filterConfirm?: React.ReactNode;
  24. filterReset?: React.ReactNode;
  25. filterEmptyText?: React.ReactNode;
  26. /**
  27. * @deprecated Please use `filterCheckAll` instead.
  28. */
  29. filterCheckall?: React.ReactNode;
  30. filterCheckAll?: React.ReactNode;
  31. filterSearchPlaceholder?: string;
  32. emptyText?: React.ReactNode | (() => React.ReactNode);
  33. selectAll?: React.ReactNode;
  34. selectNone?: React.ReactNode;
  35. selectInvert?: React.ReactNode;
  36. selectionAll?: React.ReactNode;
  37. sortTitle?: string;
  38. expand?: string;
  39. collapse?: string;
  40. triggerDesc?: string;
  41. triggerAsc?: string;
  42. cancelSort?: string;
  43. }
  44. export type SortOrder = 'descend' | 'ascend' | null;
  45. export type SorterTooltipTarget = 'full-header' | 'sorter-icon';
  46. export type SorterTooltipProps = TooltipProps & {
  47. target?: SorterTooltipTarget;
  48. };
  49. declare const _TableActions: readonly ["paginate", "sort", "filter"];
  50. export type TableAction = (typeof _TableActions)[number];
  51. export type CompareFn<T = AnyObject> = (a: T, b: T, sortOrder?: SortOrder) => number;
  52. export interface ColumnFilterItem {
  53. text: React.ReactNode;
  54. value: React.Key | boolean;
  55. children?: ColumnFilterItem[];
  56. }
  57. export interface ColumnTitleProps<RecordType = AnyObject> {
  58. /** @deprecated Please use `sorterColumns` instead. */
  59. sortOrder?: SortOrder;
  60. /** @deprecated Please use `sorterColumns` instead. */
  61. sortColumn?: ColumnType<RecordType>;
  62. sortColumns?: {
  63. column: ColumnType<RecordType>;
  64. order: SortOrder;
  65. }[];
  66. filters?: Record<string, FilterValue>;
  67. }
  68. export type ColumnTitle<RecordType = AnyObject> = React.ReactNode | ((props: ColumnTitleProps<RecordType>) => React.ReactNode);
  69. export type FilterValue = (Key | boolean)[];
  70. export type FilterKey = (string | number)[] | null;
  71. export type FilterSearchType<RecordType = AnyObject> = boolean | ((input: string, record: RecordType) => boolean);
  72. export interface FilterConfirmProps {
  73. closeDropdown: boolean;
  74. }
  75. export interface FilterRestProps {
  76. confirm?: boolean;
  77. closeDropdown?: boolean;
  78. }
  79. export interface FilterDropdownProps {
  80. prefixCls: string;
  81. setSelectedKeys: (selectedKeys: React.Key[]) => void;
  82. selectedKeys: React.Key[];
  83. /**
  84. * Confirm filter value, if you want to close dropdown before commit, you can call with
  85. * {closeDropdown: true}
  86. */
  87. confirm: (param?: FilterConfirmProps) => void;
  88. clearFilters?: (param?: FilterRestProps) => void;
  89. filters?: ColumnFilterItem[];
  90. /** Only close filterDropdown */
  91. close: () => void;
  92. visible: boolean;
  93. }
  94. interface CoverableDropdownProps extends Omit<DropdownProps, 'onOpenChange' | 'overlay' | 'visible' | 'onVisibleChange'> {
  95. onOpenChange?: (open: boolean) => void;
  96. }
  97. export interface ColumnType<RecordType = AnyObject> extends Omit<RcColumnType<RecordType>, 'title'> {
  98. title?: ColumnTitle<RecordType>;
  99. sorter?: boolean | CompareFn<RecordType> | {
  100. compare?: CompareFn<RecordType>;
  101. /** Config multiple sorter order priority */
  102. multiple?: number;
  103. };
  104. sortOrder?: SortOrder;
  105. defaultSortOrder?: SortOrder;
  106. sortDirections?: SortOrder[];
  107. sortIcon?: (props: {
  108. sortOrder: SortOrder;
  109. }) => React.ReactNode;
  110. showSorterTooltip?: boolean | SorterTooltipProps;
  111. filtered?: boolean;
  112. filters?: ColumnFilterItem[];
  113. filterDropdown?: React.ReactNode | ((props: FilterDropdownProps) => React.ReactNode);
  114. filterOnClose?: boolean;
  115. filterMultiple?: boolean;
  116. filteredValue?: FilterValue | null;
  117. defaultFilteredValue?: FilterValue | null;
  118. filterIcon?: React.ReactNode | ((filtered: boolean) => React.ReactNode);
  119. filterMode?: 'menu' | 'tree';
  120. filterSearch?: FilterSearchType<ColumnFilterItem>;
  121. onFilter?: (value: React.Key | boolean, record: RecordType) => boolean;
  122. /**
  123. * Can cover `<Dropdown>` props
  124. * @since 5.22.0
  125. */
  126. filterDropdownProps?: CoverableDropdownProps;
  127. filterResetToDefaultFilteredValue?: boolean;
  128. responsive?: Breakpoint[];
  129. /**
  130. * @deprecated Please use `filterDropdownProps.open` instead.
  131. * @since 4.23.0
  132. */
  133. filterDropdownOpen?: boolean;
  134. /**
  135. * @deprecated Please use `filterDropdownProps.onOpenChange` instead.
  136. * @since 4.23.0
  137. */
  138. onFilterDropdownOpenChange?: (visible: boolean) => void;
  139. /** @deprecated Please use `filterDropdownProps.open` instead. */
  140. filterDropdownVisible?: boolean;
  141. /** @deprecated Please use `filterDropdownProps.onOpenChange` instead */
  142. onFilterDropdownVisibleChange?: (visible: boolean) => void;
  143. }
  144. export interface ColumnGroupType<RecordType = AnyObject> extends Omit<ColumnType<RecordType>, 'dataIndex'> {
  145. children: ColumnsType<RecordType>;
  146. }
  147. export type ColumnsType<RecordType = AnyObject> = (ColumnGroupType<RecordType> | ColumnType<RecordType>)[];
  148. export interface SelectionItem {
  149. key: string;
  150. text: React.ReactNode;
  151. onSelect?: SelectionItemSelectFn;
  152. }
  153. export type SelectionSelectFn<T = AnyObject> = (record: T, selected: boolean, selectedRows: T[], nativeEvent: Event) => void;
  154. export type RowSelectMethod = 'all' | 'none' | 'invert' | 'single' | 'multiple';
  155. export interface TableRowSelection<T = AnyObject> {
  156. /** Keep the selection keys in list even the key not exist in `dataSource` anymore */
  157. preserveSelectedRowKeys?: boolean;
  158. type?: RowSelectionType;
  159. selectedRowKeys?: Key[];
  160. defaultSelectedRowKeys?: Key[];
  161. onChange?: (selectedRowKeys: Key[], selectedRows: T[], info: {
  162. type: RowSelectMethod;
  163. }) => void;
  164. getCheckboxProps?: (record: T) => Partial<Omit<CheckboxProps, 'checked' | 'defaultChecked'>>;
  165. onSelect?: SelectionSelectFn<T>;
  166. /** @deprecated This function is deprecated and should use `onChange` instead */
  167. onSelectMultiple?: (selected: boolean, selectedRows: T[], changeRows: T[]) => void;
  168. /** @deprecated This function is deprecated and should use `onChange` instead */
  169. onSelectAll?: (selected: boolean, selectedRows: T[], changeRows: T[]) => void;
  170. /** @deprecated This function is deprecated and should use `onChange` instead */
  171. onSelectInvert?: (selectedRowKeys: Key[]) => void;
  172. /** @deprecated This function is deprecated and should use `onChange` instead */
  173. onSelectNone?: () => void;
  174. selections?: INTERNAL_SELECTION_ITEM[] | boolean;
  175. hideSelectAll?: boolean;
  176. fixed?: FixedType;
  177. columnWidth?: string | number;
  178. columnTitle?: React.ReactNode | ((checkboxNode: React.ReactNode) => React.ReactNode);
  179. checkStrictly?: boolean;
  180. /** Set the alignment of the selection column */
  181. align?: 'left' | 'center' | 'right';
  182. renderCell?: (value: boolean, record: T, index: number, originNode: React.ReactNode) => React.ReactNode | RcRenderedCell<T>;
  183. onCell?: GetComponentProps<T>;
  184. getTitleCheckboxProps?: () => Partial<Omit<CheckboxProps, 'checked' | 'defaultChecked'>> & React.AriaAttributes;
  185. }
  186. export type TransformColumns<RecordType = AnyObject> = (columns: ColumnsType<RecordType>) => ColumnsType<RecordType>;
  187. export interface TableCurrentDataSource<RecordType = AnyObject> {
  188. currentDataSource: RecordType[];
  189. action: TableAction;
  190. }
  191. export interface SorterResult<RecordType = AnyObject> {
  192. column?: ColumnType<RecordType>;
  193. order?: SortOrder;
  194. field?: Key | readonly Key[];
  195. columnKey?: Key;
  196. }
  197. export type GetPopupContainer = (triggerNode: HTMLElement) => HTMLElement;
  198. type TablePaginationPosition = 'topLeft' | 'topCenter' | 'topRight' | 'bottomLeft' | 'bottomCenter' | 'bottomRight' | 'none';
  199. export interface TablePaginationConfig extends PaginationProps {
  200. position?: TablePaginationPosition[];
  201. }