import { DialogService } from "aurelia-dialog";
import { CommonDialogs } from "../dialog-service";
import { IFormSchema, IFormSchemaService } from "./form-schema-service";
import { IFormSchemaCrudService } from "./form-schema-crud-service";
import { NotificationService } from "../notification-service/notification-service";
import { ISortColumnService } from "../sort-column-service";
import { IFormSchemaRulesProvider } from "./form-schema-rules-provider";
import { IValidationService } from "../validation/validation-service";
import { IEventAggregator } from "../../interfaces/IEventAggregator";
import { ValidateResult } from "aurelia-validation";
import { I18N } from 'aurelia-i18n';
export declare class FormSchemaCollectionController<TInstance> implements IFormSchemaCollectionController<TInstance> {
    private commonDialogs;
    sortColumnService: ISortColumnService;
    private dialogService;
    private notificationService;
    formSchemaService: IFormSchemaService;
    formSchemaCrudService: IFormSchemaCrudService<TInstance>;
    private i18n;
    constructor(commonDialogs: CommonDialogs, sortColumnService: ISortColumnService, dialogService: DialogService, notificationService: NotificationService, formSchemaService: IFormSchemaService, formSchemaCrudService: IFormSchemaCrudService<TInstance>, i18n: I18N, webServiceName: string);
    validationService?: IValidationService;
    rulesGenerator?: IFormSchemaRulesProvider;
    instances: Array<any>;
    formSchema: IFormSchema;
    showing: boolean;
    disableNew: boolean;
    disableDelete: boolean;
    showKeyColumn: boolean;
    private promiseToBeLoaded;
    private _makingLocalChanges;
    private _loaded;
    insertOnNew: boolean;
    makingLocalChanges: boolean;
    protected clearMakingLocalChanges(delay?: number): Promise<void>;
    refreshDatumOnUpdate: boolean;
    private className;
    private key;
    load(andFetch?: boolean): Promise<any>;
    private getInstances();
    private getFormSchema();
    preValidate(instance: any, propertyName: string, newValue: any, oldValue: any): void;
    private _preValidate(instance, propertyName, newValue, oldValue);
    validate(instance: any, propertyName: string, newValue: any, oldValue: any): Promise<boolean>;
    registerInstances(instances: Array<any>): void;
    unRegisterInstances(instances: Array<any>): void;
    revalidateAll(): Promise<Array<ValidateResult>>;
    handleUpdate(instance: any, propertyName: string, newValue: any, oldValue: any): Promise<boolean>;
    executeUpdate(instance: any, propertyName: string, newValue: any, oldValue: any): Promise<boolean>;
    handleCreate(): Promise<any>;
    handleNew(instance: any): Promise<boolean>;
    handleDelete(instance: any): Promise<boolean>;
    fetchInstance(instance: any): Promise<any>;
    private recordIdentication(instance);
}
export interface IUpdateHandleParams {
    instance: any;
    propertyName?: string;
    newValue?: any;
    oldValue?: any;
}
export interface IFormSchemaCollectionController<TInstance> {
    instances: Array<any>;
    formSchema: IFormSchema;
    validationService?: IValidationService;
    sortColumnService: ISortColumnService;
    formSchemaService: IFormSchemaService;
    formSchemaCrudService: IFormSchemaCrudService<TInstance>;
    rulesGenerator?: IFormSchemaRulesProvider;
    disableNew?: boolean;
    disableDelete?: boolean;
    showKeyColumn?: boolean;
    refreshDatumOnUpdate?: boolean;
    load(andFetch?: boolean): Promise<any>;
    insertOnNew: boolean;
    makingLocalChanges: boolean;
}
export interface IFormSchemaCollectionInstanceApi<TInstance> extends IFormSchemaCollectionControllerEventAggregator<TInstance> {
    preValidate(instance: any, propertyName: string, newValue: any, oldValue: any): void;
    revalidateAll(): Promise<Array<ValidateResult>>;
    validate(instance: any, propertyName: string, newValue: any, oldValue: any): Promise<boolean>;
    registerInstances(instances: Array<any>): void;
    unRegisterInstances(instances: Array<any>): void;
    handleDelete: (instance: any) => Promise<boolean>;
    handleNew: (instance: any) => Promise<boolean>;
    handleCreate: () => Promise<any>;
    handleUpdate: (instance: any, propertyName: string, newValue: any, oldValue: any) => Promise<boolean>;
    fetchInstance: (instance: any) => Promise<any>;
}
export declare type IFormSchemaCollectionControllerEventAggregator<TInstance> = IFormSchemaCollectionController<TInstance> & IEventAggregator;
export { ValidateResult } from "aurelia-validation";
