import type { TableLocale } from '@antdv/ui/es/locale'; import type { Breakpoint, Key, SizeType, VueNode } from '@antdv/ui/es/types'; import type { DefaultRecordType, ExpandableConfig, FixedType, GetRowKey, ColumnType as RcColumnType, RenderedCell as RcRenderedCell } from '@antdv/ui/es/vue-components/vc-table/src/interface'; import type { TableProps as VcTableProps } from '@antdv/ui/es/vue-components/vc-table/src/Table'; import type { ComputedRef, CSSProperties, Ref, VNodeArrayChildren } from 'vue'; import type { CheckboxProps } from '../../checkbox'; import type { PaginationProps } from '../../pagination'; import type { SpinProps } from '../../spin'; import type { TooltipProps } from '../../tooltip'; import type { INTERNAL_SELECTION_ITEM } from './hooks/useSelection'; export type { ExpandableConfig, GetRowKey }; export type RowSelectionType = 'checkbox' | 'radio'; export type SelectionItemSelectFn = (currentRowKeys: Key[]) => void; export type ExpandType = null | 'row' | 'nest'; export type SortOrder = 'descend' | 'ascend' | null; declare const TableActions: ["paginate", "sort", "filter"]; export type TableAction = (typeof TableActions)[number]; export type CompareFn = (a: T, b: T, sortOrder?: SortOrder) => number; export interface ColumnFilterItem { text: VueNode; value: string | number | boolean; children?: ColumnFilterItem[]; } export interface ColumnTitleProps { /** @deprecated Please use `sorterColumns` instead. */ sortOrder?: SortOrder; /** @deprecated Please use `sorterColumns` instead. */ sortColumn?: TableColumnType; sortColumns?: Array<{ column: TableColumnType; order: SortOrder; }>; filters?: Record; } export type FilterValue = Array; export type FilterKey = Key[] | null; export type FilterSearchType> = boolean | ((input: string, record: RecordType) => boolean); export interface FilterConfirmProps { closeDropdown: boolean; } export interface FilterResetProps { confirm?: boolean; closeDropdown?: boolean; } export interface FilterDropdownProps { prefixCls: string; setSelectedKeys: (selectedKeys: Key[]) => void; selectedKeys: Key[]; confirm: (param?: FilterConfirmProps) => void; clearFilters?: (param?: FilterResetProps) => void; filters?: ColumnFilterItem[]; /** Only close filterDropdown */ close: () => void; visible: boolean; column: TableColumnType; } export interface TableColumnType extends Omit, 'title'> { title?: ColumnTitle; sorter?: boolean | CompareFn | { compare?: CompareFn; /** Config multiple sorter order priority */ multiple?: number; }; sortOrder?: SortOrder; defaultSortOrder?: SortOrder; sortDirections?: SortOrder[]; showSorterTooltip?: boolean | TooltipProps; filtered?: boolean; filters?: ColumnFilterItem[]; filterDropdown?: VueNode | ((props: FilterDropdownProps) => VueNode); filterMultiple?: boolean; filteredValue?: FilterValue | null; defaultFilteredValue?: FilterValue | null; filterIcon?: VueNode | ((opt: { filtered: boolean; column: TableColumnType; }) => VueNode); filterMode?: 'menu' | 'tree'; filterSearch?: FilterSearchType; onFilter?: (value: string | number | boolean, record: RecordType) => boolean; filterDropdownOpen?: boolean; onFilterDropdownOpenChange?: (visible: boolean) => void; filterResetToDefaultFilteredValue?: boolean; responsive?: Breakpoint[]; /** @deprecated Please use `filterDropdownOpen` instead */ filterDropdownVisible?: boolean; /** @deprecated Please use `onFilterDropdownOpenChange` instead */ onFilterDropdownVisibleChange?: (visible: boolean) => void; } export interface TableColumnGroupType extends Omit, 'dataIndex'> { children: TableColumnsType; } export type TableColumnsType = Array | TableColumnType>; export interface SelectionItem { key: string; text: VueNode; onSelect?: SelectionItemSelectFn; } export type SelectionSelectFn = (record: T, selected: boolean, selectedRows: T[], nativeEvent: Event) => void; export interface TableRowSelection { /** Keep the selection keys in list even the key not exist in `dataSource` anymore */ preserveSelectedRowKeys?: boolean; type?: RowSelectionType; selectedRowKeys?: Key[]; defaultSelectedRowKeys?: Key[]; onChange?: (selectedRowKeys: Key[], selectedRows: T[]) => void; getCheckboxProps?: (record: T) => Partial>; onSelect?: SelectionSelectFn; onSelectMultiple?: (selected: boolean, selectedRows: T[], changeRows: T[]) => void; /** @deprecated This function is meaningless and should use `onChange` instead */ onSelectAll?: (selected: boolean, selectedRows: T[], changeRows: T[]) => void; /** @deprecated This function is meaningless and should use `onChange` instead */ onSelectInvert?: (selectedRowKeys: Key[]) => void; onSelectNone?: () => void; selections?: INTERNAL_SELECTION_ITEM[] | boolean; hideSelectAll?: boolean; fixed?: FixedType; columnWidth?: string | number; columnTitle?: string | VueNode; checkStrictly?: boolean; renderCell?: (value: boolean, record: T, index: number, originNode: VueNode) => VueNode | RcRenderedCell; } export type TransformColumns = (columns: TableColumnsType) => TableColumnsType; export interface TableCurrentDataSource { currentDataSource: RecordType[]; action: TableAction; } export interface SorterResult { column?: TableColumnType; order?: SortOrder; field?: Key | readonly Key[]; columnKey?: Key; } export type GetPopupContainer = (triggerNode: HTMLElement) => HTMLElement; type TablePaginationPosition = 'topLeft' | 'topCenter' | 'topRight' | 'bottomLeft' | 'bottomCenter' | 'bottomRight'; export interface TablePaginationConfig extends PaginationProps { position?: TablePaginationPosition[]; class?: string; style?: CSSProperties; } export interface TransformCellTextProps { text: any; column: TableColumnType; record: any; index: number; } export interface UseSelectionConfig { prefixCls: Ref; pageData: Ref; data: Ref; getRowKey: Ref>; getRecordByKey: (key: Key) => RecordType; expandType: Ref; childrenColumnName: Ref; locale: Ref; getPopupContainer?: Ref; } export interface SortState { column: TableColumnType; key: Key; sortOrder: SortOrder | null; multiplePriority: number | false; } export interface ContextSlots { emptyText?: (...args: any[]) => any; expandIcon?: (...args: any[]) => any; title?: (...args: any[]) => any; footer?: (...args: any[]) => any; summary?: (...args: any[]) => any; bodyCell?: (...args: any[]) => any; expandColumnTitle?: (...args: any[]) => any; headerCell?: (...args: any[]) => any; customFilterIcon?: (...args: any[]) => any; customFilterDropdown?: (...args: any[]) => any; [key: string]: ((...args: any[]) => any) | undefined; } export type SlotsContextProps = ComputedRef; export interface DefaultExpandIconProps { prefixCls: string; onExpand: (record: RecordType, e: MouseEvent) => void; record: RecordType; expanded: boolean; expandable: boolean; } export interface ChangeEventInfo { pagination: { current?: number; pageSize?: number; total?: number; }; filters: Record; sorter: SorterResult | Array>; filterStates: Array>; sorterStates: Array>; resetPagination: Function; } export interface TableProps extends Omit, 'transformColumns' | 'internalHooks' | 'internalRefs' | 'data' | 'columns' | 'scroll' | 'emptyText' | 'canExpandable' | 'onUpdateInternalRefs'> { dropdownPrefixCls?: string; dataSource?: VcTableProps['data']; columns?: TableColumnsType; pagination?: false | TablePaginationConfig; loading?: boolean | SpinProps; size?: SizeType; bordered?: boolean; locale?: TableLocale; onChange?: (pagination: TablePaginationConfig, filters: Record, sorter: SorterResult | Array>, extra: TableCurrentDataSource) => void; onResizeColumn?: (w: number, col: TableColumnType) => void; rowSelection?: TableRowSelection; getPopupContainer?: GetPopupContainer; scroll?: VcTableProps['scroll'] & { scrollToFirstRowOnChange?: boolean; }; sortDirections?: SortOrder[]; showSorterTooltip?: boolean | TooltipProps; } export type TableColumnProps = TableColumnType; export interface FilterState { column: TableColumnType; key: Key; filteredKeys?: FilterKey; forceFiltered?: boolean; } type ColumnTitleNode = VueNode | VNodeArrayChildren; export type ColumnTitle = ColumnTitleNode | ((props: ColumnTitleProps) => ColumnTitleNode); export interface FilterConfig { prefixCls: Ref; dropdownPrefixCls: Ref; mergedColumns: Ref>; locale: Ref; onFilterChange: (filters: Record, filterStates: Array>) => void; getPopupContainer?: Ref; }