///
import { IBehavior } from '../../Utilities/Behavior';
import { IEventDispatch } from '../../Utilities/Dispatch';
import { ITable, ITableColumn, ITableProps, SortOrder } from "./Table.Props";
/**
* The sortDelegate function is used to notify the caller when a change to the
* sort order is being requested.
*
* @param columnIndex - The index of the column the request was made on.
* @param proposedSortOrder - The proposed sort order is based on the default changes
* from the current sort order of the column. If the affected column is not sorted
* or is sorted descending, SortOrder.ascending is proposed. If the column is
* currently sorted ascending, SortOrder.descending is proposed.
* @param event - This is the event that caused the sorting request.
*/
export declare type sortDelegate = (columnIndex: number, proposedSortOrder: SortOrder, event: React.KeyboardEvent | React.MouseEvent) => void;
/**
* The ColumnSorting class is a behavior that can be used with the Table
* component to provide column sorting. To use the ColumnSorting, create an
* instance passing the sorting delegate to the constructor. Then supply
* the created behavior to the table.
*/
export declare class ColumnSorting implements IBehavior, ITable> {
private onSort;
private props;
constructor(onSort: sortDelegate);
initialize: (props: Readonly>, table: ITable, eventDispatch: IEventDispatch) => void;
private onClick;
private onKeyDown;
private processSortEvent;
}
/**
* sortItems is a helper method that works with the ColumnSorting and a Table
* component to make it eaiser to maitain the props of the table. This function
* will update the column definitions and return the sorted data. The caller
* needs to update the props to the table appropriately after calling this
* method.
*
* @param columnIndex The column that should be sorted.
* @param sortOrder The order the data should be sorted.
* @param sortFunctions An array of sort functions. Each sortable column should
* have a function supplied. If there are non-sortable columns, null should be
* supplied for their index.
* @param columns The column definitions for the table.
* @param items The array of items that should be sorted. Note: This is done in
* place so the input array will be updated.
*
* @return The resulting sorted array of items.
*/
export declare function sortItems(columnIndex: number, sortOrder: SortOrder, sortFunctions: Array<((item1: T, item2: T) => number) | null>, columns: ITableColumn[], items: T[]): T[];