import { Injector } from '@angular/core';
import { ModelViewComponent } from './model-view.component';
import { AbstractControl, UntypedFormGroup } from '@angular/forms';
import { FieldValidations, FormBuilderHelper, FormFields } from './form-builder-helper';
import { Observable } from 'rxjs';
import * as i0 from "@angular/core";
export declare abstract class FormComponent<T> extends ModelViewComponent<T> {
    protected api: any;
    formModel: UntypedFormGroup;
    formFields: FormFields;
    model: T | any;
    modelIdProperty: string;
    autoload: boolean;
    dataPath: string;
    fieldRequiredErrorMessageText: string;
    invalidValuesMessageText: string;
    msgSuccessfulCreateText: string;
    msgSuccessfulUpdateText: string;
    _isSaving: boolean;
    /**
     * This property is used to idenfify whe the form model don't exist yet
     */
    routeCreateKeyword: string;
    protected fbHelper: FormBuilderHelper;
    constructor(injector: Injector, api: any);
    subscribeRouteParams(): void;
    ngOnInit(): void;
    onData(model: any): void;
    /**
     * Hook para cargar datasets relacionados como por ejemplo: listas de selección
     */
    loadDatasets(): void;
    getPostData(): any;
    getNewModel(): T;
    getModelId(): any;
    isFormValid(): boolean;
    /**
     * Permite determinar si el campo debe incluirse en el formulario
     * @param field
     * @returns
     */
    hasField(field: string): boolean;
    /**
     * Retorna el campo del formulario solicitado
     * @param name
     */
    getFormControl(name: string): AbstractControl | null;
    hasError(fieldName: string, errorType: string): boolean | undefined;
    getFieldProperty(fieldName: string, prop: keyof FieldValidations): any;
    getFieldValue(field: string): any;
    defineFormModel(): void;
    /**
     * Permite modificar la definición original del campo antes de construir el formControl
     * @param field
     * @returns
     */
    protected transformDefinedField(fieldName: string, field: FieldValidations): FieldValidations;
    /**
     * Permite modificar los valores que se usarán para construir el formControl
     * @param field
     * @returns
     */
    protected getValuesForFormModel(values: T | any): any;
    isFieldRequired(fieldName: string): boolean | undefined;
    hasMinLengthError(fieldName: string): boolean | undefined;
    hasMaxLengthError(fieldName: string): boolean | undefined;
    getRequiredErrorMessage(_fieldName?: string): string;
    getMinLengthErrorMessage(fieldName: string): string;
    getMaxLengthErrorMessage(fieldName: string): string;
    onSubmit(): void;
    resetValues(): void;
    /**
     *
     * @returns true si el modelo posee un id.
     */
    isRecordStored(): boolean;
    getDataService(): any;
    getSaveService(model: any): Observable<any>;
    static ɵfac: i0.ɵɵFactoryDeclaration<FormComponent<any>, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<FormComponent<any>, never, never, { "dataPath": { "alias": "dataPath"; "required": false; }; }, {}, never, never, true, never>;
}
