/// <reference types="react" />
import * as React from 'react';
import * as GoodData from 'gooddata';
import { Afm, DataSource, MetadataSource } from '@gooddata/data-layer';
import 'rxjs/add/operator/switchMap';
import { IChartConfig } from '../core/base/BaseChart';
import { IEvents } from '../../interfaces/Events';
import { Requireable } from '../../proptypes/Visualization';
import { IDrillableItem } from '../../interfaces/DrillEvents';
export { Requireable };
export declare type VisualizationEnvironment = 'none' | 'dashboards';
export interface IVisualizationProps extends IEvents {
    projectId: string;
    uri?: string;
    identifier?: string;
    locale?: string;
    config?: IChartConfig;
    filters?: Afm.IFilter[];
    drillableItems?: IDrillableItem[];
    uriResolver?: (projectId: string, uri?: string, identifier?: string) => Promise<string>;
}
export interface IVisualizationExecInfo {
    type: string;
    dataSource: DataSource.IDataSource<GoodData.ISimpleExecutorResult>;
    metadataSource: MetadataSource.IMetadataSource;
}
export interface IVisualizationState {
    isLoading: boolean;
}
export declare class Visualization extends React.Component<IVisualizationProps, IVisualizationState> {
    static propTypes: {
        filters: Requireable<any>;
        drillableItems: Requireable<any>;
        projectId: (object: any, key: string, componentName: string, ...rest: any[]) => Error;
        identifier: Requireable<any>;
        uri: Requireable<any>;
        uriResolver: Requireable<any>;
        onError: Requireable<any>;
        onLoadingChanged: Requireable<any>;
        afterRender: Requireable<any>;
        pushData: Requireable<any>;
        config: Requireable<any>;
    };
    static defaultProps: Partial<IVisualizationProps>;
    private visualizationUri;
    private type;
    private uriAdapter;
    private metadataSource;
    private dataSource;
    private subscription;
    private subject;
    constructor(props: IVisualizationProps);
    componentDidMount(): void;
    componentWillUnmount(): void;
    shouldComponentUpdate(nextProps: IVisualizationProps, nextState: IVisualizationState): boolean;
    hasChangedProps(nextProps: IVisualizationProps, propKeys?: string[]): boolean;
    componentWillReceiveProps(nextProps: IVisualizationProps): void;
    render(): JSX.Element;
    private prepareDataSources({projectId, identifier, filters});
}
