import { KeyboardEvent, ChangeEvent } from 'react';
import { GenericFilterType, GenericFilterValueType } from './types';

export type TableUiType = {
    searchValue: string;
    searchParam: string;
    pageNumber: number;
    itemsPerPage: number;
    filters: GenericFilterType[];
};
export type TableHookProps = {
    onStartLoading?: () => void;
    onFetch: (url: string, srcUrl?: string) => void;
    url: string;
    externalFilters?: {
        filterKey: string;
        value: GenericFilterValueType;
    }[];
    initial?: {
        filters?: {
            filterKey: string;
            value: GenericFilterValueType;
        }[];
        searchParam?: string;
        pageNumber?: number;
        itemsPerPage?: number;
    };
    onUpdateTableParams?: (newValue: {
        filters: {
            filterKey: string;
            value: GenericFilterValueType;
        }[];
        searchParam: string;
        pageNumber: number;
        itemsPerPage: number;
    }) => void;
    onChangeItemsPerPage?: (newvalue: number) => void;
    itemsPerPageStorageKey?: string;
    preprocessFilters?: (filtersIn: {
        filterKey: string;
        value: GenericFilterValueType;
    }[]) => {
        filterKey: string;
        value: GenericFilterValueType;
    }[];
    postprocessFilters?: (filtersIn: {
        filterKey: string;
        value: GenericFilterValueType;
    }[]) => {
        filterKey: string;
        value: GenericFilterValueType;
    }[];
    searchValue?: string;
    isUnpaginated?: boolean;
    disablePagination?: boolean;
    scrollContainerId?: string;
};
export declare const useTableUi: (props: TableHookProps) => {
    tableUi: TableUiType;
    setTableUi: import('react').Dispatch<import('react').SetStateAction<TableUiType>>;
    handleSeachChange: (e: ChangeEvent<HTMLInputElement>) => void;
    handleSeachParamChange: (e: ChangeEvent<HTMLInputElement>) => void;
    handleSearchKeyUp: (e: KeyboardEvent<HTMLInputElement> & ChangeEvent<HTMLInputElement>) => void;
    clearFilters: () => void;
    setFilters: (newValue: ((current: GenericFilterType[]) => GenericFilterType[]) | GenericFilterType[]) => void;
    updateData: () => Promise<void>;
    changePageNumber: (newValue: ((current: number) => number) | number) => void;
    changeItemsPerPage: (newValue: ((current: number) => number) | number) => void;
    UrlParams: {
        fullUrl: string;
        paramsString: string;
        unpaginatedParamsString: string;
    };
};
