import type { ComponentType, ReactNode } from "react";
import { type LoadingAndErrorWrapperProps } from "../../../components/LoadingAndErrorWrapper";
import type { Dispatch } from "../../../../metabase-types/store";
import type { EntityId, EntityIdSelector, EntityQuery, EntityQuerySelector, EntityType, EntityTypeSelector, FetchType, RequestType } from "./types";
interface ChildrenProps<Entity, EntityWrapper> {
    dispatch: Dispatch;
    error: unknown;
    fetched: boolean;
    loading: boolean;
    /**
     * object is EntityWrapper when Props["wrapped"] is true
     */
    object: EntityWrapper | Entity | undefined;
    reload: () => void;
}
interface Props<Entity, EntityWrapper> {
    ComposedComponent: (props: ChildrenProps<Entity, EntityWrapper>) => ReactNode;
    entityAlias?: string;
    entityId: EntityId | EntityIdSelector | undefined;
    entityQuery?: EntityQuery | EntityQuerySelector;
    entityType: EntityType | EntityTypeSelector;
    fetchType?: FetchType;
    loadingAndErrorWrapper?: boolean;
    LoadingAndErrorWrapper?: ComponentType<LoadingAndErrorWrapperProps>;
    reload?: boolean | ChildrenProps<Entity, EntityWrapper>["reload"];
    requestType?: RequestType;
    selectorName?: "getObject" | "getObjectUnfiltered";
    wrapped?: boolean;
}
/**
 * Difference between the 2 generic types, using Database entity as an example:
 *   Entity        -> Database from metabase-types/api/database.ts
 *   EntityWrapper -> Database from metabase-lib/v1/metadata/Database.ts
 *
 * @deprecated use "metabase/api" instead
 */
export declare function EntityObjectLoader<Entity, EntityWrapper>({ ComposedComponent, entityAlias, entityId: entityIdProp, entityQuery: entityQueryProp, entityType: entityTypeProp, fetchType, loadingAndErrorWrapper, LoadingAndErrorWrapper, reload, requestType, selectorName, wrapped, ...props }: Props<Entity, EntityWrapper>): import("react/jsx-runtime").JSX.Element;
/**
 * @deprecated HOCs are deprecated
 */
export declare const entityObjectLoader: <Entity, EntityWrapper>(eolProps: any) => (ComposedComponent: (props: ChildrenProps<Entity, EntityWrapper>) => ReactNode) => (props: any) => import("react/jsx-runtime").JSX.Element;
export {};
