import { OnDestroy, OnInit, QueryList } from '@angular/core';
import { ActivatedRoute, ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs';
import { AppContextService } from '../../service/app-context.service';
import { ConfirmationDialogOptions } from '../dialog/confirmation-dialog/confirmation-dialog.component';
import { DialogService } from '../dialog/dialog.service';
import { ObjectPropertySchemaFieldLoaderComponent, SchemaFieldHostComponent } from './schema-field-host.component';
import { DataSchema } from './schema-models';
import * as i0 from "@angular/core";
export declare class TabbedFormLoaderComponent extends ObjectPropertySchemaFieldLoaderComponent implements OnInit, OnDestroy {
    private appContextService;
    private activatedRoute;
    private router;
    private dialogService;
    private cancelNextRouteGuard;
    private subscriptions;
    private originalData;
    protected fieldHostComponents: QueryList<SchemaFieldHostComponent>;
    private navLinkElements;
    baseUrl: string;
    activeFormName: string;
    constructor(appContextService: AppContextService, activatedRoute: ActivatedRoute, router: Router, dialogService: DialogService);
    static registerDataType(): void;
    ngOnInit(): void;
    ngOnDestroy(): void;
    setupSchema(schema: DataSchema): void;
    switchForm(formName: string): void;
    setFormOriginalData(formName: any, data: any): void;
    isFormBusy(formName: string): boolean;
    isFormDirty(formName: string): boolean;
    getFooterButtonHideOption(formName: string): boolean;
    getFooterButtonText(formName: string, button: string): string;
    isFormValid(formName: string): boolean;
    onSaveClick(formName: string): void;
    onDiscardClick(formName: string): void;
    canDeactivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot, confirmationDialogOptions: ConfirmationDialogOptions): Observable<boolean> | Promise<boolean> | boolean;
    onCloseClick(): void;
    private getBaseUrl;
    static ɵfac: i0.ɵɵFactoryDeclaration<TabbedFormLoaderComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<TabbedFormLoaderComponent, "ng-component", never, {}, {}, never, never, false, never>;
}
export declare class TabbedFormController {
    controller: {
        [formName: string]: TabbedFormItemController<any, any>;
    };
}
export declare abstract class TabbedFormItemController<TDataModel, TViewModel> {
    private isBusyInternal;
    private isDisabledInternal;
    abstract loadData(): Promise<TDataModel>;
    abstract convertDataModelToViewModel(dataModel: TDataModel): TViewModel;
    abstract mergeViewModelToDataModel(viewModel: TViewModel, dataModel: TDataModel): TDataModel;
    abstract submitData(dataModel: TDataModel): Promise<void>;
    abstract onSaving(viewModel: TViewModel): void;
    abstract onFetchError(error: any): void;
    abstract onSaveError(error: any): void;
    abstract onSaveSuccess(viewModel: TViewModel): void;
    isBusy(): boolean;
    isDisabled(): boolean;
    initialize(): Promise<TViewModel>;
    saveData(viewModel: TViewModel): Promise<void>;
}
