import { AbstractControl, AbstractControlOptions, FormArray, FormControl, FormGroup, ValidationErrors, ValidatorFn } from '@angular/forms'; import { ClassConstructor, ClassTransformOptions } from 'class-transformer-global-storage'; import { ValidatorOptions } from 'class-validator-multi-lang'; import { BehaviorSubject, Observable, ReplaySubject, Subscription } from 'rxjs'; export type DeepPartial = { [P in keyof T]?: DeepPartial; }; export interface IDynamicControlMetadata { classType: ClassConstructor | null; propertyName: string | null; propertyIndex?: number; isArray: boolean; properties: IDynamicControlMetadata[]; withAncestors?: boolean; ignore?: boolean; parent?: IDynamicControlMetadata; } export type AngularControlValidators = { [P in keyof T]: AngularControlValidators; } | ValidatorFn | ValidatorFn[] | AbstractControlOptions | undefined | null; export interface DynamicControlOptions { rootValue: any; controlPath: string; control: AbstractControl | DynamicFormProperties; metadata: IDynamicControlMetadata; } export type DynamicFormProperties = { classTransformMetadata: IDynamicControlMetadata; externalErrors: ClassValidatorErrors; classValidatorErrors: ClassValidatorErrors; externalErrorsSubject: BehaviorSubject; classValidatorErrorsSubject: BehaviorSubject; customValidateErrors: BehaviorSubject; parent: AbstractControl['parent'] | DynamicFormProperties; value: AbstractControl['value']; }; export type DynamicFormArray = FormArray & DynamicFormProperties; export type DynamicFormControl = FormControl & DynamicFormProperties; export declare enum DynamicFormBuilderOptionsKeys { classValidatorOptions = "classValidatorOptions", classTransformOptions = "classTransformOptions", classTransformToPlainOptions = "classTransformToPlainOptions", angularValidators = "angularValidators" } export type DynamicClassTransformOptions = ClassTransformOptions & { excludeGroups?: string[]; }; export interface DynamicFormBuilderOptions { [DynamicFormBuilderOptionsKeys.classValidatorOptions]?: ValidatorOptions; [DynamicFormBuilderOptionsKeys.classTransformOptions]?: DynamicClassTransformOptions; [DynamicFormBuilderOptionsKeys.classTransformToPlainOptions]?: ClassTransformOptions; [DynamicFormBuilderOptionsKeys.angularValidators]?: AngularControlValidators; } export interface ClassValidatorErrors { [key: string]: { messages?: string[]; children?: ClassValidatorErrors; }; } export interface ShortValidationErrors { [key: string]: string[] | ShortValidationErrors | any; } export type DynamicFormGroup = FormGroup & DynamicFormProperties & { globalDynamicFormBuilderOptionsChangedSubscription: Subscription; dynamicFormBuilderOptions: DynamicFormBuilderOptions; commonAsyncValidatorSubject: ReplaySubject; commonAsyncValidatorFirstChanged: boolean; commonAsyncValidatorFirstChangedSubscription: Subscription; commonAsyncValidator: (control: DynamicFormProperties | AbstractControl) => Observable; setExternalErrors(externalErrors: ClassValidatorErrors): void; getExternalErrors(): ClassValidatorErrors; getClassValidatorErrors: (control: AbstractControl | null, nullIfEmpty: boolean) => Observable; setDynamicValue(value: DeepPartial, options?: { onlySelf?: boolean; emitEvent?: boolean; }): void; patchDynamicFormBuilderOptions(dynamicFormBuilderOptions: DynamicFormBuilderOptions): void; refresh: () => void; object: T; json: TJSON; getObject: () => T; setObject: (object: T) => void; getJSON: () => TJSON; setJSON: (object: TJSON) => void; };