@aappddeevv/dynamics-client-ui
Version:
## What is it? A library to help you create great dynamics applications.
91 lines (90 loc) • 3.91 kB
TypeScript
import { IColumn } from 'office-ui-fabric-react/lib/DetailsList';
export declare const OTHER: string;
export declare type SortOrder = "asc" | "desc" | "OTHER";
export declare type SortOrderState = SortOrder | "FIRST";
/** Sorting state for a single column. */
export interface ColumnSortInfo {
/** Sorting direction. */
direction: SortOrder;
/** Position in column sorting order e.g. if firstname to be sorted *after* lastname,
* pos=1 for firstname and pos=0 for lastname.
*/
position: number;
}
/** Group of individual column sort infos. State key is column index or IColumn.key. */
export declare type SortingState = {
[col: number]: ColumnSortInfo;
[col: string]: ColumnSortInfo;
};
/** Transition table for sorting direction state machine. */
export interface SortOrderTransitions extends Partial<Record<SortOrder, SortOrder>> {
/** Starting state is required. */
FIRST: SortOrder;
}
/**
* Default sort order state machine table. You can also store these as state in
* in your component and provide them to the byColumns* functions.
*/
export declare const defaultOrder: SortOrderTransitions;
/**
* Previous SortingState => new SortingState (state machine). Only allows single
* column sorting. Cycles through sorting order if its already sorted on that column.
*/
export declare function byColumn({current, transitions, selectedColumn, defaultPosition}: {
current: SortingState;
transitions: SortOrderTransitions;
selectedColumn: number | string;
defaultPosition?: number;
}): SortingState;
/**
* Updates a multi column sorting state by updating the selectedColumn.
* If selectedColumn is new to the sorting state, it is placed last in the
* positions.
*/
export declare function byColumns({current, transitions, selectedColumn}: {
current: SortingState;
transitions: SortOrderTransitions;
selectedColumn: number | string;
}): SortingState;
/** Sort data. */
export declare type Sorter<T> = (a: Array<T>) => Array<T>;
/** Create Sorter functions given sorting information. */
export declare type SortFunctionFactory<T> = (info: Array<{
property: string;
direction: SortOrder;
}>) => Sorter<T>;
/**
* Create a Sorter given columns, sorting state and a sort function factory.
* Uses IColumn.key to lookup fieldname|data.sortAttribute if sorting state has a property name as a key,
* or IColumn[index] to lookup the column.
*/
export declare const sorter: <T>({ columns, state, factory }: {
columns: IColumn[];
factory?: SortFunctionFactory<T> | undefined;
state: SortingState;
}) => Sorter<T>;
/** Sort function factory that uses ramda sortWith. */
export declare function ramdaSortFunctionFactory<T>(info: Array<{
property: string;
direction: SortOrder;
}>): Sorter<T>;
/** Update column definitios based on the column key and the map of updates. */
export declare function updateColumns(columns: IColumn[], updates: {
[key: string]: Partial<IColumn>;
}): IColumn[];
/**
* Enhance a list of column-like information based on the sortState. All columns are
* are sortable unless data.isSortable = false.
* You can set a DetailsList.onColumnHeaderClick instead of passing in onSortColumn.
*/
export declare function augmentColumns(cols: any[], sortState: SortingState, onSortColumn?: (c: IColumn) => void, getMoreProps?: (c: IColumn, idx: number) => Record<string, any>): IColumn[];
/**
* Given a request to sort, update critical key parts of the sorting infrastructure.
* You will need to sort your data with the returned sorter function. The returned
* columns are updated with the new sort state (e.g. isSorted, isSortedDescending).
*/
export declare function onSortColumn<T>(c: IColumn, columns: IColumn[], sortState: SortingState, transitions: SortOrderTransitions, factory?: SortFunctionFactory<T>): {
columns: IColumn[];
sortState: SortingState;
sorter: Sorter<T>;
};