import * as React from "react";
import { DataLayer, SDK } from "@gooddata/gooddata-js";
import { AFM, Execution } from "@gooddata/typings";
import { IEvents } from "../interfaces/Events";
import { Requireable } from "../proptypes/Execute";
import { RuntimeError } from "../errors/RuntimeError";
export { Requireable };
export declare type IDataTableFactory = (sdk: SDK, projectId: string) => DataLayer.DataTable<Execution.IExecutionResponses>;
export interface IExecuteProps extends IEvents {
    afm: AFM.IAfm;
    resultSpec?: AFM.IResultSpec;
    projectId: string;
    children?: any;
    sdk?: SDK;
    dataTableFactory?: IDataTableFactory;
    telemetryComponentName?: string;
}
export interface IExecuteState {
    result: Execution.IExecutionResponses;
    isLoading: boolean;
    error?: RuntimeError;
}
export interface IExecuteChildrenProps {
    result: Execution.IExecutionResponses;
    error: RuntimeError;
    isLoading: boolean;
}
/**
 * [Execute](http://sdk.gooddata.com/gooddata-ui/docs/execute_component.html)
 * is a component that does execution based on afm and resultSpec props and passes the result to it's children function
 */
export declare class Execute extends React.Component<IExecuteProps, IExecuteState> {
    static propTypes: {
        projectId: import("prop-types").Validator<any>;
        afm: import("prop-types").Validator<any>;
        resultSpec: Requireable<any>;
        children: import("prop-types").Validator<any>;
        LoadingComponent: Requireable<any>;
        ErrorComponent: Requireable<any>;
        telemetryComponentName: Requireable<any>;
        onError: Requireable<any>;
        onLoadingChanged: Requireable<any>;
        onLoadingFinish: Requireable<any>;
        afterRender: Requireable<any>;
        pushData: Requireable<any>;
    };
    static defaultProps: Partial<IExecuteProps>;
    private dataTable;
    private sdk;
    constructor(props: IExecuteProps);
    componentWillMount(): void;
    componentWillReceiveProps(nextProps: IExecuteProps): void;
    shouldComponentUpdate(nextProps: IExecuteProps, nextState: IExecuteState): boolean;
    render(): any;
    private isPropChanged;
    private hasPropsChanged;
    private runExecution;
    private initDataTable;
}
