projects/ng-dynamic-forms/core/src/lib/model/dynamic-form-control.model.ts
        
| Properties | 
| 
 | 
| asyncValidators | 
| asyncValidators:          | 
| Type : DynamicValidatorsConfig | 
| Optional | 
| controlTooltip | 
| controlTooltip:          | 
| Type : string | 
| Optional | 
| disabled | 
| disabled:          | 
| Type : boolean | 
| Optional | 
| errorMessages | 
| errorMessages:          | 
| Type : DynamicValidatorsConfig | 
| Optional | 
| hidden | 
| hidden:          | 
| Type : boolean | 
| Optional | 
| id | 
| id:          | 
| Type : string | 
| label | 
| label:          | 
| Type : string | 
| Optional | 
| labelTooltip | 
| labelTooltip:          | 
| Type : string | 
| Optional | 
| name | 
| name:          | 
| Type : string | 
| Optional | 
| relations | 
| relations:      | 
| Type : DynamicFormControlRelation[] | 
| Optional | 
| updateOn | 
| updateOn:          | 
| Type : DynamicFormHook | 
| Optional | 
| validators | 
| validators:          | 
| Type : DynamicValidatorsConfig | 
| Optional | 
import { BehaviorSubject, Observable } from "rxjs";
import { DynamicFormControlLayout } from "./misc/dynamic-form-control-layout.model";
import { DynamicPathable } from "./misc/dynamic-form-control-path.model";
import { DynamicFormControlRelation } from "./misc/dynamic-form-control-relation.model";
import { DynamicFormHook, DynamicValidatorsConfig } from "./misc/dynamic-form-control-validation.model";
import { serializable, serialize } from "../decorator/serializable.decorator";
import { isBoolean, isObject, isString } from "../utils/core.utils";
export interface DynamicFormControlModelConfig {
    asyncValidators?: DynamicValidatorsConfig;
    disabled?: boolean;
    errorMessages?: DynamicValidatorsConfig;
    hidden?: boolean;
    id: string;
    label?: string;
    labelTooltip?: string;
    controlTooltip?: string;
    name?: string;
    relations?: DynamicFormControlRelation[];
    updateOn?: DynamicFormHook;
    validators?: DynamicValidatorsConfig;
}
export abstract class DynamicFormControlModel implements DynamicPathable {
    @serializable() asyncValidators: DynamicValidatorsConfig | null;
    @serializable("disabled") _disabled: boolean;
    @serializable() errorMessages: DynamicValidatorsConfig | null;
    @serializable() hidden: boolean;
    @serializable() id: string;
    @serializable() label: string | null;
    @serializable() labelTooltip: string | null;
    @serializable() controlTooltip: string | null;
    @serializable() layout: DynamicFormControlLayout | null;
    @serializable() name: string;
    parent: DynamicPathable | null = null;
    @serializable() relations: DynamicFormControlRelation[];
    @serializable() updateOn: DynamicFormHook | null;
    @serializable() validators: DynamicValidatorsConfig | null;
    private readonly disabled$: BehaviorSubject<boolean>;
    readonly disabledChanges: Observable<boolean>;
    abstract readonly type: string;
    protected constructor(config: DynamicFormControlModelConfig, layout: DynamicFormControlLayout | null = null) {
        this.asyncValidators = config.asyncValidators || null;
        this.errorMessages = config.errorMessages || null;
        this.hidden = isBoolean(config.hidden) ? config.hidden : false;
        this.id = config.id;
        this.label = config.label || null;
        this.labelTooltip = config.labelTooltip || null;
        this.controlTooltip = config.controlTooltip || null;
        this.layout = layout;
        this.name = config.name || config.id;
        this.relations = Array.isArray(config.relations) ? config.relations : [];
        this.updateOn = isString(config.updateOn) ? config.updateOn : null;
        this.validators = config.validators || null;
        this.disabled$ = new BehaviorSubject(isBoolean(config.disabled) ? config.disabled : false);
        this.disabled$.subscribe(disabled => this._disabled = disabled);
        this.disabledChanges = this.disabled$.asObservable();
    }
    get disabled(): boolean {
        return this.disabled$.getValue();
    }
    set disabled(disabled: boolean) {
        this.disabled$.next(disabled);
    }
    get hasErrorMessages(): boolean {
        return isObject(this.errorMessages);
    }
    toJSON() {
        return serialize(this);
    }
}