File
        
        
            Extends
            
            
        
            
                
                    
                        
                                
                                    | additional | 
                                
                                    | additional:     literal type | 
                                    
                                        | Type : literal type | 
                                    
                                        | Optional | 
                        
                    
                    
                    
                    
                    
                        
                                
                                    | value | 
                                
                                    | value:     T | 
                                    
                                        | Type : T | 
                                    
                                        | Optional | 
                        
                    
            
     
    
        import { BehaviorSubject, Observable } from "rxjs";
import { DynamicFormControlModel, DynamicFormControlModelConfig } from "./dynamic-form-control.model";
import { DynamicFormControlLayout } from "./misc/dynamic-form-control-layout.model";
import { serializable } from "../decorator/serializable.decorator";
import { isBoolean, isObject } from "../utils/core.utils";
export interface DynamicFormValueControlModelConfig<T> extends DynamicFormControlModelConfig {
    additional?: { [key: string]: any };
    hint?: string;
    required?: boolean;
    tabIndex?: number;
    value?: T;
}
export abstract class DynamicFormValueControlModel<T> extends DynamicFormControlModel {
    @serializable() additional: { [key: string]: any } | null;
    @serializable() hint: string | null;
    @serializable() required: boolean;
    @serializable() tabIndex: number | null;
    @serializable("value") private _value: T | null;
    private readonly value$: BehaviorSubject<T>;
    readonly valueChanges: Observable<T>;
    protected constructor(config: DynamicFormValueControlModelConfig<T>, layout?: DynamicFormControlLayout) {
        super(config, layout);
        this.additional = isObject(config.additional) ? config.additional : null;
        this.hint = config.hint || null;
        this.required = isBoolean(config.required) ? config.required : false;
        this.tabIndex = config.tabIndex || null;
        this.value$ = new BehaviorSubject(config.value !== null && config.value !== undefined ? config.value : null);
        this.value$.subscribe(value => this._value = value);
        this.valueChanges = this.value$.asObservable();
    }
    get value(): T | null {
        return this.value$.getValue();
    }
    set value(value: T | null) {
        this.value$.next(value);
    }
    getAdditional(key: string, defaultValue?: any | null): any {
        return this.additional !== null && this.additional.hasOwnProperty(key) ? this.additional[key] : defaultValue;
    }
}