import { AfterViewInit, ChangeDetectorRef, EventEmitter, Injector, OnChanges, OnInit, SimpleChanges } from "@angular/core";
import { FormBuilder, FormGroup } from "@angular/forms";
import { Subject } from "rxjs/internal/Subject";
import { EventBus, IDataSource, IEvent, LoggerService } from "@nova-ui/bits";
import { ProviderRegistryService } from "../../../../../services/provider-registry.service";
import { IHasChangeDetector, IHasForm, IProperties, IProviderConfiguration, IProviderConfigurationForDisplay } from "../../../../../types";
import { ConfiguratorHeadingService } from "../../../../services/configurator-heading.service";
import * as i0 from "@angular/core";
/**
 * This is a basic implementation of a data source configuration component. In the real world scenario, this component will most likely be replaced by a
 * custom one, but still can be used as a template for developing a custom specific solution.
 */
export declare class DataSourceConfigurationV2Component implements IHasChangeDetector, IHasForm, OnInit, OnChanges, AfterViewInit {
    changeDetector: ChangeDetectorRef;
    configuratorHeading: ConfiguratorHeadingService;
    protected formBuilder: FormBuilder;
    protected providerRegistryService: ProviderRegistryService;
    protected eventBus: EventBus<IEvent>;
    protected injector: Injector;
    protected logger: LoggerService;
    static lateLoadKey: string;
    /**
     * This component shows a dropdown with options for selecting a data source, this input represents these options.
     */
    dataSourceProviders: IProviderConfigurationForDisplay[];
    properties: IProperties;
    providerId: string;
    errorComponent: string;
    formReady: EventEmitter<FormGroup<any>>;
    form: FormGroup;
    hasDataSourceError: boolean;
    dataSource: IDataSource;
    dataFieldIds: Subject<any>;
    constructor(changeDetector: ChangeDetectorRef, configuratorHeading: ConfiguratorHeadingService, formBuilder: FormBuilder, providerRegistryService: ProviderRegistryService, eventBus: EventBus<IEvent>, injector: Injector, logger: LoggerService);
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    ngAfterViewInit(): void;
    onDataSourceSelected(selectedDataSource: IProviderConfigurationForDisplay): void;
    /**
     * The data source is invoked here to notify the rest of the form about  changes in the data source output.
     * DATA_SOURCE_OUTPUT event is emitted through the event bus carrying the data source result as the payload.
     * This might not be necessary in every situation. If the important information is already stored in the
     * data source properties, this step can be omitted.
     *
     * @param data
     */
    invokeDataSource(data: IProviderConfiguration): void;
    onErrorState(isError: boolean): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<DataSourceConfigurationV2Component, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DataSourceConfigurationV2Component, "nui-data-source-configuration", never, { "dataSourceProviders": { "alias": "dataSourceProviders"; "required": false; }; "properties": { "alias": "properties"; "required": false; }; "providerId": { "alias": "providerId"; "required": false; }; "errorComponent": { "alias": "errorComponent"; "required": false; }; }, { "formReady": "formReady"; }, never, never, false, never>;
}
