import React from "react";
import type { QueryObserverResult, UseQueryOptions } from "@tanstack/react-query";
import type { BaseRecord, CrudFilter, CrudSort, GetListResponse, HttpError, MetaQuery, Pagination, Prettify } from "../../contexts/data/types";
import type { LiveModeProps } from "../../contexts/live/types";
import type { SuccessErrorNotification } from "../../contexts/notification/types";
import type { BaseListProps } from "../data/useList";
import type { MakeOptional } from "../../definitions/types/index";
import type { UseLoadingOvertimeOptionsProps, UseLoadingOvertimeReturnType } from "../useLoadingOvertime";
type SetFilterBehavior = "merge" | "replace";
export type useTableProps<TQueryFnData, TError, TData> = {
    /**
     * Resource name for API data interactions
     * @default Resource name that it reads from route
     */
    resource?: string;
    /**
     * Configuration for pagination
     */
    pagination?: Pagination;
    /**
     * Sort configs
     */
    sorters?: {
        /**
         * Initial sorter state
         */
        initial?: CrudSort[];
        /**
         * Default and unchangeable sorter state
         *  @default `[]`
         */
        permanent?: CrudSort[];
        /**
         * Whether to use server side sorting or not.
         * @default "server"
         */
        mode?: "server" | "off";
    };
    /**
     * Filter configs
     */
    filters?: {
        /**
         * Initial filter state
         */
        initial?: CrudFilter[];
        /**
         * Default and unchangeable filter state
         *  @default `[]`
         */
        permanent?: CrudFilter[];
        /**
         * Default behavior of the `setFilters` function
         * @default `"merge"`
         */
        defaultBehavior?: SetFilterBehavior;
        /**
         * Whether to use server side filter or not.
         * @default "server"
         */
        mode?: "server" | "off";
    };
    /**
     * Sortings, filters, page index and records shown per page are tracked by browser history
     * @default Value set in [Refine](/docs/api-reference/core/components/refine-config/#syncwithlocation). If a custom resource is given, it will be `false`
     */
    syncWithLocation?: boolean;
    /**
     * react-query's [useQuery](https://tanstack.com/query/v5/docs/framework/react/reference/useQuery) options
     */
    queryOptions?: MakeOptional<UseQueryOptions<GetListResponse<TQueryFnData>, TError, GetListResponse<TData>>, "queryKey" | "queryFn">;
    /**
     * Metadata query for dataProvider
     */
    meta?: MetaQuery;
    /**
     * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.
     */
    dataProviderName?: string;
} & SuccessErrorNotification<GetListResponse<TData>, TError, Prettify<BaseListProps>> & LiveModeProps & UseLoadingOvertimeOptionsProps;
type ReactSetState<T> = React.Dispatch<React.SetStateAction<T>>;
type SyncWithLocationParams = {
    pagination: {
        currentPage?: number;
        pageSize?: number;
    };
    sorters: CrudSort[];
    filters: CrudFilter[];
};
export type useTableReturnType<TData extends BaseRecord = BaseRecord, TError extends HttpError = HttpError> = {
    tableQuery: QueryObserverResult<GetListResponse<TData>, TError>;
    sorters: CrudSort[];
    setSorters: (sorter: CrudSort[]) => void;
    filters: CrudFilter[];
    setFilters: ((filters: CrudFilter[], behavior?: SetFilterBehavior) => void) & ((setter: (prevFilters: CrudFilter[]) => CrudFilter[]) => void);
    createLinkForSyncWithLocation: (params: SyncWithLocationParams) => string;
    currentPage: number;
    setCurrentPage: ReactSetState<useTableReturnType["currentPage"]>;
    pageSize: number;
    setPageSize: ReactSetState<useTableReturnType["pageSize"]>;
    pageCount: number;
    result: {
        data: TData[];
        total: number | undefined;
    };
} & UseLoadingOvertimeReturnType;
export declare function useTable<TQueryFnData extends BaseRecord = BaseRecord, TError extends HttpError = HttpError, TData extends BaseRecord = TQueryFnData>({ pagination, filters: filtersFromProp, sorters: sortersFromProp, syncWithLocation: syncWithLocationProp, resource: resourceFromProp, successNotification, errorNotification, queryOptions, liveMode: liveModeFromProp, onLiveEvent, liveParams, meta, dataProviderName, overtimeOptions, }?: useTableProps<TQueryFnData, TError, TData>): useTableReturnType<TData, TError>;
export {};
//# sourceMappingURL=index.d.ts.map