import { InputGroupComponent } from '@farris/ui-input-group';
import { EnumEditorService, EnumOutType } from './enum-editor.service';
import { Component, OnInit, Injector, ElementRef, Input, EventEmitter, Output, forwardRef, ViewChild, ChangeDetectorRef } from '@angular/core';
import { LookupComponent } from '@farris/ui-lookup';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
export const ENUM_EDITOR_VALUE_ACCESSOR: any = {
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => EnumEditorInputComponent),
multi: true
};
@Component({
selector: 'enum-editor-input',
template: `
`,
providers: [
ENUM_EDITOR_VALUE_ACCESSOR,
EnumEditorService
]
})
export class EnumEditorInputComponent extends LookupComponent implements OnInit {
@Input() value: any;
@Input() textField = 'name';
@Input() valueField = 'value';
@Input() outType: EnumOutType = EnumOutType.array;
@Input() enableClear = true;
@Output() valueChange = new EventEmitter();
@ViewChild('ig') inputGroupRef: InputGroupComponent;
groupIcon = '';
cd: ChangeDetectorRef = null;
constructor(public injector: Injector, private ees: EnumEditorService, public el: ElementRef) {
super(injector, el);
this.ees.dataChanged.subscribe(str => {
this.updateData(str);
});
this.cd = this.injector.get(ChangeDetectorRef, null);
}
private updateData(str: any) {
this.value = str;
if (this.cd) {
this.cd.detectChanges();
}
this.valueChange.emit(str);
this.onModelChange(str);
this.onModelTouched(str);
}
ngOnInit(): void { }
showDialog() {
const enumData = this.convertValue2JSON();
this.ees.showDialog(enumData, {
textField: this.textField,
valueField: this.valueField,
outType: this.outType
});
}
onClear($event) {
this.updateData('');
}
writeValue(val: any) {
if (val && typeof val === 'object') {
this.value = JSON.stringify(val);
} else {
this.value = val || '';
}
}
private convertValue2JSON() {
return this.ees.toJSON(this.value);
}
}