import { AxiosResponse } from 'axios';
import { DropdownOption, MultiSelectOption } from './options';
import { QueryParams } from '../components/v2/DataTable/DataTable.vue.d';
export type FilterFieldTypes = 'dropdown' | 'multiselect' | 'calendar' | 'rangenumber';
export type FilterOptions<Opt = Record<string, boolean>> = Record<keyof Opt, DropdownOption[] | MultiSelectOption[]>;
export interface FilterField<OptionsQueryParams extends QueryParams = QueryParams> {
    /**
     * Represents a function type for fetching options based on query parameters.
     *
     * @template OptionsQueryParams - The type of query parameters, extending `QueryParams`. Defaults to `any`.
     *
     * This function can have one of the following signatures:
     * - A synchronous function that takes query parameters and returns an array of `Option` objects.
     * - An asynchronous function that takes query parameters and returns a `Promise` resolving to an array of `Option` objects.
     * - An asynchronous function that takes query parameters and returns a `Promise` resolving to an `AxiosResponse` containing a `FetchOptionResponse` object.
     *
     * @param args - The query parameters of type `T` used to fetch the options.
     * @returns One of the following:
     * - An array of `Option` objects.
     * - A `Promise` resolving to an array of `Option` objects.
     * - A `Promise` resolving to an `AxiosResponse` containing a `FetchOptionResponse` object.
     */
    fetchOptionFn(args?: OptionsQueryParams): DropdownOption[] | Promise<DropdownOption[]> | Promise<AxiosResponse<CustomFieldFetchOptionResponse>>;
    type: FilterFieldTypes;
    field: keyof OptionsQueryParams;
    label: string;
    optionField?: keyof OptionsQueryParams;
    params?: OptionsQueryParams;
}
export type CustomFieldFetchOptionResponse<Opt = Record<string, boolean>> = {
    message: string;
    data: FilterOptions<Opt> & {
        customFieldOptions?: FilterOptions<Opt>;
    };
};
