import { RowModel } from '..'; import { TableFeature } from '../core/table'; import { BuiltInSortingFn } from '../sortingFns'; import { OnChangeFn, Table, Row, Updater, RowData, SortingFns } from '../types'; export type SortDirection = 'asc' | 'desc'; export interface ColumnSort { id: string; desc: boolean; } export type SortingState = ColumnSort[]; export interface SortingTableState { sorting: SortingState; } export interface SortingFn { (rowA: Row, rowB: Row, columnId: string): number; } export type CustomSortingFns = Record>; export type SortingFnOption = 'auto' | keyof SortingFns | BuiltInSortingFn | SortingFn; export interface SortingColumnDef { sortingFn?: SortingFnOption; sortDescFirst?: boolean; enableSorting?: boolean; enableMultiSort?: boolean; invertSorting?: boolean; sortUndefined?: false | -1 | 1; } export interface SortingColumn { getAutoSortingFn: () => SortingFn; getAutoSortDir: () => SortDirection; getSortingFn: () => SortingFn; getFirstSortDir: () => SortDirection; getNextSortingOrder: () => SortDirection | false; getCanSort: () => boolean; getCanMultiSort: () => boolean; getSortIndex: () => number; getIsSorted: () => false | SortDirection; clearSorting: () => void; toggleSorting: (desc?: boolean, isMulti?: boolean) => void; getToggleSortingHandler: () => undefined | ((event: unknown) => void); } interface SortingOptionsBase { manualSorting?: boolean; onSortingChange?: OnChangeFn; enableSorting?: boolean; enableSortingRemoval?: boolean; enableMultiRemove?: boolean; enableMultiSort?: boolean; sortDescFirst?: boolean; getSortedRowModel?: (table: Table) => () => RowModel; maxMultiSortColCount?: number; isMultiSortEvent?: (e: unknown) => boolean; } type ResolvedSortingFns = keyof SortingFns extends never ? { sortingFns?: Record>; } : { sortingFns: Record>; }; export interface SortingOptions extends SortingOptionsBase, ResolvedSortingFns { } export interface SortingInstance { setSorting: (updater: Updater) => void; resetSorting: (defaultState?: boolean) => void; getPreSortedRowModel: () => RowModel; getSortedRowModel: () => RowModel; _getSortedRowModel?: () => RowModel; } export declare const Sorting: TableFeature; export {};