import * as React from 'react';
import * as PropTypes from 'prop-types';
declare type Direction = 'asc' | 'desc';
interface RenderProp {
    data: any[];
    activePage: number;
    pages: number;
    sortBy: string;
    direction: string;
    searchQuery: string;
    toggleDirection: () => void;
    reset: () => void;
    prevPage: () => void;
    nextPage: () => void;
    goToPage: (activePage: number) => void;
    setDirection: (direction: Direction) => void;
    setSortBy: (sortBy: string) => void;
    search: (value: string) => void;
}
interface DataSortProps {
    data: any[];
    render?: ({}: RenderProp) => React.ReactNode;
    paginate?: boolean;
    sortBy?: string;
    direction?: string;
    itemsPerPage?: number;
    activePage?: number;
    defaultSortBy?: string;
    defaultDirection?: string;
    defaultActivePage?: number;
    searchQuery?: string;
    searchInKeys?: any[];
}
interface DataSortState {
    sortBy: string | null;
    direction: string;
    pages: number | null;
    activePage: number;
    data: any[];
    searchQuery: string;
}
declare class DataSort extends React.Component<DataSortProps, DataSortState> {
    static propTypes: {
        data: PropTypes.Validator<any[]>;
        render: PropTypes.Requireable<(...args: any[]) => any>;
        paginate: PropTypes.Requireable<boolean>;
        sortBy: PropTypes.Requireable<string>;
        direction: PropTypes.Requireable<string>;
        itemsPerPage: PropTypes.Requireable<number>;
        activePage: PropTypes.Requireable<number>;
        defaultSortBy: PropTypes.Requireable<string>;
        defaultDirection: PropTypes.Requireable<string>;
        searchQuery: PropTypes.Requireable<string>;
        searchInKeys: PropTypes.Requireable<any[]>;
    };
    static defaultProps: {
        itemsPerPage: number;
        paginate: boolean;
    };
    state: DataSortState;
    componentDidMount(): void;
    isPaginationControlled(): boolean;
    isSortByControlled(): boolean;
    isDirectionControlled(): boolean;
    isSearchControlled(): boolean;
    reset: () => void;
    prevPage: () => void;
    nextPage: () => void;
    goToPage: (activePage: number) => void;
    setSortBy: (sortBy: string) => void;
    setDirection: (direction: Direction) => void;
    toggleDirection: () => void;
    /**
     * Search dataset with given query
     *
     * @param value: string
     */
    search: (value: string) => void;
    render(): {};
}
export default DataSort;
