interface.d.ts 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. import type { GetRowKey, ColumnType as RcColumnType, RenderedCell as RcRenderedCell, ExpandableConfig, DefaultRecordType, FixedType } from '../vc-table/interface';
  2. import type { TooltipProps } from '../tooltip';
  3. import type { CheckboxProps } from '../checkbox';
  4. import type { PaginationProps } from '../pagination';
  5. import type { Breakpoint } from '../_util/responsiveObserve';
  6. import type { INTERNAL_SELECTION_ITEM } from './hooks/useSelection';
  7. import type { VueNode } from '../_util/type';
  8. import type { CSSProperties, VNodeArrayChildren } from 'vue';
  9. export type { GetRowKey, ExpandableConfig };
  10. export type Key = string | number;
  11. export type RowSelectionType = 'checkbox' | 'radio';
  12. export type SelectionItemSelectFn = (currentRowKeys: Key[]) => void;
  13. export type ExpandType = null | 'row' | 'nest';
  14. export interface TableLocale {
  15. filterTitle?: string;
  16. filterConfirm?: any;
  17. filterReset?: any;
  18. filterEmptyText?: any;
  19. filterCheckall?: any;
  20. filterSearchPlaceholder?: any;
  21. emptyText?: any | (() => any);
  22. selectAll?: any;
  23. selectNone?: any;
  24. selectInvert?: any;
  25. selectionAll?: any;
  26. sortTitle?: string;
  27. expand?: string;
  28. collapse?: string;
  29. triggerDesc?: string;
  30. triggerAsc?: string;
  31. cancelSort?: string;
  32. }
  33. export type SortOrder = 'descend' | 'ascend' | null;
  34. declare const TableActions: ["paginate", "sort", "filter"];
  35. export type TableAction = (typeof TableActions)[number];
  36. export type CompareFn<T> = (a: T, b: T, sortOrder?: SortOrder) => number;
  37. export interface ColumnFilterItem {
  38. text: VueNode;
  39. value: string | number | boolean;
  40. children?: ColumnFilterItem[];
  41. }
  42. export interface ColumnTitleProps<RecordType> {
  43. /** @deprecated Please use `sorterColumns` instead. */
  44. sortOrder?: SortOrder;
  45. /** @deprecated Please use `sorterColumns` instead. */
  46. sortColumn?: ColumnType<RecordType>;
  47. sortColumns?: {
  48. column: ColumnType<RecordType>;
  49. order: SortOrder;
  50. }[];
  51. filters?: Record<string, FilterValue>;
  52. }
  53. type ColumnTitleNode = VueNode | VNodeArrayChildren;
  54. export type ColumnTitle<RecordType> = ColumnTitleNode | ((props: ColumnTitleProps<RecordType>) => ColumnTitleNode);
  55. export type FilterValue = (Key | boolean)[];
  56. export type FilterKey = Key[] | null;
  57. export type FilterSearchType<RecordType = Record<string, any>> = boolean | ((input: string, record: RecordType) => boolean);
  58. export interface FilterConfirmProps {
  59. closeDropdown: boolean;
  60. }
  61. export interface FilterResetProps {
  62. confirm?: boolean;
  63. closeDropdown?: boolean;
  64. }
  65. export interface FilterDropdownProps<RecordType> {
  66. prefixCls: string;
  67. setSelectedKeys: (selectedKeys: Key[]) => void;
  68. selectedKeys: Key[];
  69. confirm: (param?: FilterConfirmProps) => void;
  70. clearFilters?: (param?: FilterResetProps) => void;
  71. filters?: ColumnFilterItem[];
  72. /** Only close filterDropdown */
  73. close: () => void;
  74. visible: boolean;
  75. column: ColumnType<RecordType>;
  76. }
  77. export interface ColumnType<RecordType = DefaultRecordType> extends Omit<RcColumnType<RecordType>, 'title'> {
  78. title?: ColumnTitle<RecordType>;
  79. sorter?: boolean | CompareFn<RecordType> | {
  80. compare?: CompareFn<RecordType>;
  81. /** Config multiple sorter order priority */
  82. multiple?: number;
  83. };
  84. sortOrder?: SortOrder;
  85. defaultSortOrder?: SortOrder;
  86. sortDirections?: SortOrder[];
  87. showSorterTooltip?: boolean | TooltipProps;
  88. filtered?: boolean;
  89. filters?: ColumnFilterItem[];
  90. filterDropdown?: VueNode | ((props: FilterDropdownProps<RecordType>) => VueNode);
  91. filterMultiple?: boolean;
  92. filteredValue?: FilterValue | null;
  93. defaultFilteredValue?: FilterValue | null;
  94. filterIcon?: VueNode | ((opt: {
  95. filtered: boolean;
  96. column: ColumnType;
  97. }) => VueNode);
  98. filterMode?: 'menu' | 'tree';
  99. filterSearch?: FilterSearchType<ColumnFilterItem>;
  100. onFilter?: (value: string | number | boolean, record: RecordType) => boolean;
  101. filterDropdownOpen?: boolean;
  102. onFilterDropdownOpenChange?: (visible: boolean) => void;
  103. filterResetToDefaultFilteredValue?: boolean;
  104. responsive?: Breakpoint[];
  105. /** @deprecated Please use `filterDropdownOpen` instead */
  106. filterDropdownVisible?: boolean;
  107. /** @deprecated Please use `onFilterDropdownOpenChange` instead */
  108. onFilterDropdownVisibleChange?: (visible: boolean) => void;
  109. }
  110. export interface ColumnGroupType<RecordType> extends Omit<ColumnType<RecordType>, 'dataIndex'> {
  111. children: ColumnsType<RecordType>;
  112. }
  113. export type ColumnsType<RecordType = DefaultRecordType> = (ColumnGroupType<RecordType> | ColumnType<RecordType>)[];
  114. export interface SelectionItem {
  115. key: string;
  116. text: VueNode;
  117. onSelect?: SelectionItemSelectFn;
  118. }
  119. export type SelectionSelectFn<T> = (record: T, selected: boolean, selectedRows: T[], nativeEvent: Event) => void;
  120. export interface TableRowSelection<T = DefaultRecordType> {
  121. /** Keep the selection keys in list even the key not exist in `dataSource` anymore */
  122. preserveSelectedRowKeys?: boolean;
  123. type?: RowSelectionType;
  124. selectedRowKeys?: Key[];
  125. defaultSelectedRowKeys?: Key[];
  126. onChange?: (selectedRowKeys: Key[], selectedRows: T[]) => void;
  127. getCheckboxProps?: (record: T) => Partial<Omit<CheckboxProps, 'checked' | 'defaultChecked'>>;
  128. onSelect?: SelectionSelectFn<T>;
  129. onSelectMultiple?: (selected: boolean, selectedRows: T[], changeRows: T[]) => void;
  130. /** @deprecated This function is meaningless and should use `onChange` instead */
  131. onSelectAll?: (selected: boolean, selectedRows: T[], changeRows: T[]) => void;
  132. /** @deprecated This function is meaningless and should use `onChange` instead */
  133. onSelectInvert?: (selectedRowKeys: Key[]) => void;
  134. onSelectNone?: () => void;
  135. selections?: INTERNAL_SELECTION_ITEM[] | boolean;
  136. hideSelectAll?: boolean;
  137. fixed?: FixedType;
  138. columnWidth?: string | number;
  139. columnTitle?: string | VueNode;
  140. checkStrictly?: boolean;
  141. renderCell?: (value: boolean, record: T, index: number, originNode: VueNode) => VueNode | RcRenderedCell<T>;
  142. }
  143. export type TransformColumns<RecordType> = (columns: ColumnsType<RecordType>) => ColumnsType<RecordType>;
  144. export interface TableCurrentDataSource<RecordType = DefaultRecordType> {
  145. currentDataSource: RecordType[];
  146. action: TableAction;
  147. }
  148. export interface SorterResult<RecordType = DefaultRecordType> {
  149. column?: ColumnType<RecordType>;
  150. order?: SortOrder;
  151. field?: Key | readonly Key[];
  152. columnKey?: Key;
  153. }
  154. export type GetPopupContainer = (triggerNode: HTMLElement) => HTMLElement;
  155. type TablePaginationPosition = 'topLeft' | 'topCenter' | 'topRight' | 'bottomLeft' | 'bottomCenter' | 'bottomRight';
  156. export interface TablePaginationConfig extends PaginationProps {
  157. position?: TablePaginationPosition[];
  158. class?: string;
  159. style?: CSSProperties;
  160. }
  161. export interface TransformCellTextProps {
  162. text: any;
  163. column: ColumnType;
  164. record: any;
  165. index: number;
  166. }