import BasicIdRestModel from './BasicIdRestModel';
import { Schema, StringOrNumberKeys } from "../../Schema";
import { RestModel, UrlCallbackParam } from '../index';
import { HttpError } from '../../../../';
export declare type UseGetResult<Item, MetaData> = {
    items: NonNullable<Item>[];
    initialized: boolean;
    loading: boolean;
    invalidated: boolean;
    error: HttpError | null;
    metadata: MetaData | null;
    reload: () => void;
};
export declare type UseGetPopulatedResult<PartialItem, PopulatedItem, MetaData> = {
    invalidated: boolean;
    error: HttpError | null;
    initialized: boolean;
    loading: boolean;
    metadata: MetaData | null;
} & ({
    populated: true;
    items: PopulatedItem[];
} | {
    populated: false;
    items: PartialItem[];
});
export default class BasicSearchRestModel<S extends Schema<any> = any, IdKey extends StringOrNumberKeys<S['RealType']> & StringOrNumberKeys<S['PopulatedType']> & string = any, GetItem = any, MetaData = any> extends RestModel<{}, S, IdKey, GetItem, MetaData> {
    constructor(idModel: BasicIdRestModel<S, IdKey>, url: UrlCallbackParam<{}>);
    useInvalidate(queryString?: string | URLSearchParams): () => void;
    useFetchIfNeeded(queryString?: string | URLSearchParams): void;
    useGet(queryString?: string | URLSearchParams): {
        reload: () => void;
        error: HttpError | null;
        initialized: boolean;
        invalidated: boolean;
        loading: boolean;
        items: NonNullable<S["RealType"]>[];
        metadata: MetaData | null;
    };
    useFetchPopulatedIfNeeded(queryString?: string | URLSearchParams): void;
    useGetPopulated(queryString?: string | URLSearchParams): {
        reload: () => void;
        invalidated: boolean;
        error: HttpError | null;
        initialized: boolean;
        loading: boolean;
        metadata: MetaData | null;
        populated: true;
        items: S["FullPopulatedType"][];
    } | {
        reload: () => void;
        invalidated: boolean;
        error: HttpError | null;
        initialized: boolean;
        loading: boolean;
        metadata: MetaData | null;
        populated: false;
        items: S["PopulatedType"][];
    };
}
