File

projects/ng-dynamic-forms/core/src/lib/model/dynamic-form-control.model.ts

Index

Properties

Properties

asyncValidators
asyncValidators: DynamicValidatorsConfig
Type : DynamicValidatorsConfig
Optional
controlTooltip
controlTooltip: string
Type : string
Optional
disabled
disabled: boolean
Type : boolean
Optional
errorMessages
errorMessages: DynamicValidatorsConfig
Type : DynamicValidatorsConfig
Optional
hidden
hidden: boolean
Type : boolean
Optional
id
id: string
Type : string
label
label: string
Type : string
Optional
labelTooltip
labelTooltip: string
Type : string
Optional
name
name: string
Type : string
Optional
relations
relations: DynamicFormControlRelation[]
Type : DynamicFormControlRelation[]
Optional
updateOn
updateOn: DynamicFormHook
Type : DynamicFormHook
Optional
validators
validators: DynamicValidatorsConfig
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);
    }
}

result-matching ""

    No results matching ""