import React from "react";
import { AxiosResponse, AxiosError } from "axios";
import { FormikHelpers, FormikValues } from "formik";
import FieldsInterface from "../../../components/Form/definitions/FieldsInterface";
import ColumnsInterface from "../../../components/Table/definitions/ColumnsInterface";
import QueryInterface from "../../../components/Table/definitions/QueryInterface";
import SortingDirection from "../../../components/Table/definitions/SortingDirection";
import SortingInterface from "../../../components/Table/definitions/SortingInterface";
import FiltersInterface from "../../../components/Table/definitions/FiltersInterface";
import FilterValuesInterface from "../../../components/Table/definitions/FilterValuesInterface";
import ResultInterface from "../../../components/Table/definitions/ResultInterface";
import BatchSelectedType from "../../../components/Table/definitions/BatchSelectedType";
import BatchQueryInterface from "../../../components/Table/definitions/BatchQueryInterface";
import ColumnNamesType from "../../../components/Table/definitions/ColumnNamesType";
import EndpointType from "../../../definitions/EndpointType";
interface TableContextProps {
    columns: ColumnsInterface;
    results: ResultInterface[];
    page: number;
    rowCount: number;
    rowsPerPage: number;
    rowsPerPageOptions: number[];
    disablePagination: boolean;
    onChangePage: (event: React.MouseEvent<HTMLButtonElement> | null, page: number) => void;
    onChangeRowsPerPage: (event: any) => void;
    toolbar?: React.ReactNode;
    filters: FilterValuesInterface;
    filterFields?: FieldsInterface;
    filterClass?: {
        accordion: string;
        accordionActive: string;
    };
    onSubmitFilters: (values: FormikValues, helpers: FormikHelpers<FormikValues>) => void;
    isFiltersActive: () => boolean;
    clearFilters: (setFieldValue: (field: string, value: any, shouldValidate?: boolean) => void) => void;
    sorting: SortingInterface;
    isSortingActive: (field: string) => boolean;
    getSortingDirection: (field: string) => undefined | SortingDirection;
    onClickSorting: (field: string) => void;
    applySorting: (field: string, direction: SortingDirection) => void;
    removeSorting: (field: string) => void;
    enableBatchSelect?: boolean;
    selected: number[];
    isSelected: (id: number) => boolean;
    deselectAll: () => void;
    selectAll: () => void;
    addSelected: (id: number) => void;
    removeSelected: (id: number) => void;
    toggleSelected: (id: number) => void;
    reload: () => void;
    query: QueryInterface;
    batchQuery: BatchQueryInterface;
    visibleColumns: ColumnNamesType;
    defaultColumns: ColumnNamesType;
    visibleColumnsKey?: string;
    visibleColumnsEndpoint?: EndpointType;
    setVisibleColumns?: React.Dispatch<React.SetStateAction<ColumnNamesType>>;
    reloadVisibleColumns: () => void;
}
interface TableProviderProps {
    columns: ColumnsInterface;
    defaultColumns?: ColumnNamesType;
    children: React.ReactNode;
    endpoint: EndpointType;
    onLoadSuccess?: (defaultOnLoadSuccess: () => void, response: AxiosResponse, setResults: React.Dispatch<React.SetStateAction<ResultInterface[]>>, setRowCount: React.Dispatch<React.SetStateAction<number>>, setSelected: React.Dispatch<React.SetStateAction<BatchSelectedType>>, setVisibleColumns: React.Dispatch<React.SetStateAction<ColumnNamesType>>) => void;
    getQuery?: (defaultGetQuery: () => QueryInterface, getFiltersDefinitions: (filterValues: FilterValuesInterface) => FiltersInterface, page: number, rowsPerPage: number, sorting: SortingInterface, filters: FilterValuesInterface, additionalSorting?: SortingInterface, additionalFilters?: FiltersInterface) => QueryInterface;
    getBatchQuery?: (defaultGetBatchQuery: () => BatchQueryInterface, getFiltersDefinitions: (filterValues: FilterValuesInterface) => FiltersInterface, getQuery: (page: number, rowsPerPage: number, sorting: SortingInterface, filters: FilterValuesInterface, additionalSorting?: SortingInterface, additionalFilters?: FiltersInterface) => QueryInterface, page: number, rowsPerPage: number, sorting: SortingInterface, filters: FilterValuesInterface, selected: BatchSelectedType, additionalSorting?: SortingInterface, additionalFilters?: FiltersInterface) => BatchQueryInterface;
    rowsPerPage?: number;
    rowsPerPageOptions?: number[];
    disablePagination?: boolean;
    toolbar?: React.ReactNode;
    filters?: FieldsInterface;
    defaultFilters?: FilterValuesInterface;
    additionalFilters?: FiltersInterface;
    defaultSorting?: SortingInterface;
    additionalSorting?: SortingInterface;
    queryKey?: string;
    enableMultipleColumnsSorting?: boolean;
    enableBatchSelect?: boolean;
    visibleColumnsKey?: string;
    visibleColumnsEndpoint?: EndpointType;
    onVisibleColumnsLoadSuccess?: (defaultOnVisibleColumnsLoadSuccess: () => void, response: AxiosResponse, setVisibleColumns: React.Dispatch<React.SetStateAction<ColumnNamesType>>, visibleColumns: ColumnNamesType) => void;
    onVisibleColumnsLoadCatch?: (defaultOnVisibleColumnsLoadCatch: () => void, error: AxiosError, setVisibleColumns: React.Dispatch<React.SetStateAction<ColumnNamesType>>, visibleColumns: ColumnNamesType) => void;
    disableReloadOnLocationKeyChange?: boolean;
}
declare const TableContext: React.Context<TableContextProps>;
declare const TableProvider: ({ children, columns, defaultColumns: _defaultColumns, endpoint, onLoadSuccess, getQuery: _getQuery, getBatchQuery: _getBatchQuery, rowsPerPage: _rowsPerPage, rowsPerPageOptions, disablePagination, toolbar, filters: filterFields, defaultFilters, additionalFilters, defaultSorting, additionalSorting, queryKey: _queryKey, enableMultipleColumnsSorting, enableBatchSelect, visibleColumnsKey, visibleColumnsEndpoint, onVisibleColumnsLoadSuccess, onVisibleColumnsLoadCatch, disableReloadOnLocationKeyChange, }: TableProviderProps) => React.JSX.Element;
declare const useTable: () => TableContextProps;
export { TableContext, TableContextProps, TableProvider, TableProviderProps, useTable };
