import * as React from "react";
import { SDK, DataLayer } from "@gooddata/gooddata-js";
import { AFM, Execution } from "@gooddata/typings";
import { IDataSource } from "../../interfaces/DataSource";
export declare type IAdapterFactory = (sdk: SDK, projectId: string) => DataLayer.IAdapter<Execution.IExecutionResponses>;
export interface IDataSourceProviderProps {
    afm: AFM.IAfm;
    projectId: string;
    resultSpec?: AFM.IResultSpec;
    adapterFactory?: IAdapterFactory;
    sdk?: SDK;
    [p: string]: any;
}
export interface IDataSourceProviderState {
    exportTitle?: string;
    dataSource: IDataSource;
    resultSpec?: AFM.IResultSpec;
}
export interface IDataSourceProviderInjectedProps extends IDataSourceProviderState {
    updateTotals?: (totals: AFM.ITotalItem[]) => void;
}
export declare type IDataSourceInfoPromise = Promise<IDataSource>;
export declare type IGenerateDefaultDimensionsFunction = (afm: AFM.IAfm) => AFM.IDimension[];
/**
 * dataSourceProvider
 * is a function that creates a dataSource and passes it to InnerComponent
 * @param InnerComponent: React.ComponentClass<T & IDataSourceProviderInjectedProps>
 *   a component that will be pased dataSource prop
 * @param generateDefaultDimensions - a function that returns default dimensions
 * @param componentName: string - InnerComponent actual name
 * @internal
 */
export declare function dataSourceProvider<T>(InnerComponent: React.ComponentType<T & IDataSourceProviderInjectedProps>, generateDefaultDimensions: IGenerateDefaultDimensionsFunction, componentName: string, exportTitle?: string): React.ComponentClass<IDataSourceProviderProps>;
