import * as React from "react";
import { SortDirection } from "@dccs/react-table-mui";
import { OnLoadData } from ".";
import { IParams } from "./IParams";
import { PropType } from "@dccs/react-table-mui/lib/IColDef";
export interface IDataState<T extends object, F extends object> extends IParams<T, F> {
    setTotal: (total: number) => void;
    setPage: (page: number) => void;
    setRowsPerPage: (rpp: number) => void;
    setOrderBy: (orderBy: PropType<T>) => void;
    setSort: (sort: SortDirection | undefined) => void;
    setFilter: (filter: F | undefined) => void;
    setFilterProp: (key: keyof F, value: any) => void;
    allowLoad: boolean;
    setAllowLoad: React.Dispatch<React.SetStateAction<boolean>>;
    error: boolean;
    loading: boolean;
    data: T[];
    reload: () => void;
    handleChangePage(p: number): void;
    handleChangeRowsPerPage(rows: number): void;
    handleChangeOrderBy(ob: PropType<T>): void;
    handleChangeFilter(ob: PropType<T>, value: any): void;
    load(): void;
}
export interface IPersistState {
    store: "localStorage" | "sessionStorage";
    uniqueID: string;
}
export interface IUseDataStateProps<T extends object, F extends object> {
    onLoadData: OnLoadData<T, F>;
    initialRowsPerPage?: number;
    initialOrderBy?: PropType<T>;
    initialSort?: SortDirection;
    initialLoad?: boolean;
    initialPage?: number;
    initialFilter?: F;
    persistState?: IPersistState;
}
export declare function useDataState<T extends object, F extends object>(props: IUseDataStateProps<T, F>): IDataState<T, F>;
