blob: 5d361f0647ac1e5848f5e21f9477279a939f9592 [file] [log] [blame]
import { Component, OnInit, Input, Output, ViewChild, ElementRef, EventEmitter } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
@Component({
selector: 'hi-input-inline',
templateUrl: './input-inline.component.html',
styleUrls: ['./input-inline.component.scss']
})
export class InputInlineComponent implements ControlValueAccessor, OnInit {
@ViewChild('inputControl', {static: true}) inputControl: ElementRef;
@Output('update') change: EventEmitter<string> = new EventEmitter<string>();
@Input() label: string = '';
@Input() min: number = -9999;
@Input() max: number = 99999999;
@Input() minlength: number = 0;
@Input() maxlength: number = 2555;
@Input() type: string = 'text';
@Input() required: boolean = false;
@Input() focus: Function = _ => { };
@Input() blur: Function = _ => { };
@Input() pattern: string = null;
@Input() errorLabel: string = 'Invalid input value';
@Input() editLabel: string = 'Click to edit';
@Input() disabled: boolean = false;
editing: boolean = false;
private _value: string = '';
@Input()
get value(): any {
return this._value;
}
set value(v: any) {
if (v !== this._value) {
this._value = v;
this.onChange(v);
}
}
private lastValue: string = '';
// Required forControlValueAccessor interface
public onChange: any = Function.prototype;
public onTouched: any = Function.prototype;
public registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; }
public registerOnTouched(fn: () => {}): void { this.onTouched = fn; };
writeValue(value: any) {
this._value = value;
}
constructor() { }
ngOnInit() {
}
hasError() {
const exp = new RegExp(this.pattern);
if (!this.value) {
return this.required;
}
if (this.pattern && !exp.test(this.value)) {
return true;
}
return false;
}
edit(value) {
if (this.disabled) {
return;
}
this.lastValue = value;
this.editing = true;
setTimeout(_ => {
this.inputControl.nativeElement.focus();
});
}
onBlur($event: Event) {
if (this.hasError()) {
return false;
}
// this.blur();
this.editing = false;
this.change.emit(this.value);
}
cancel() {
this._value = this.lastValue;
this.editing = false;
}
}