import { Subject, Observer } from "./Observable";
import { RequestType } from "./ReducerStorage";
import { RestModel } from "./restmodels";
export declare class ModelState<R extends RestModel<any, any, any, any, any>> implements Subject {
    private observers;
    private _state;
    private model;
    constructor(r: RestModel<any, any, any, any, any>);
    get modelName(): string;
    get state(): {
        searchs: {
            [url: string]: RequestType<{
                ids: any[];
                metadata: any;
            }>;
        };
        ids: {
            [key: string]: {
                [id: string]: RequestType<any>;
            };
        };
    };
    addKeyModel(key: string): void;
    attach(observer: Observer): void;
    detach(observer: Observer): void;
    notify(): void;
    getRequest(url: string): RequestType<{
        ids: R['itemType'][];
        metadata: any;
    }>;
    getRequestById(key: string, id: string): RequestType<R['model']['schema']['RealType']>;
    /**
     * updateGet for an internal use
     */
    updateGet<R extends RestModel<any, any, any, any, any>>(url: string, request: Partial<RequestType<{
        ids: R['itemType'][];
        metadata: any;
    }>>): void;
    /**
     * updateGetById for an internal use
     */
    updateGetById(key: string, id: string, request: Partial<RequestType<R['model']['schema']['RealType']>>): void;
}
export declare class State implements Observer, Subject {
    private observers;
    private _state;
    get state(): {
        [modelName: string]: {
            searchs: {
                [url: string]: RequestType<{
                    ids: any[];
                    metadata: any;
                }>;
            };
            ids: {
                [key: string]: {
                    [id: string]: RequestType<any>;
                };
            };
        };
    };
    attach(observer: Observer): void;
    detach(observer: Observer): void;
    notify(): void;
    update(subject: ModelState<any>): void;
}
declare const _default: State;
export default _default;
