import { Component, Input, Output, EventEmitter, ElementRef, forwardRef, ExistingProvider, OnInit, OnChanges } from '@angular/core'; import { InputBase } from './inputBase'; import { RdLib } from "../../base/rdLib" const provider: ExistingProvider = { provide: InputBase, useExisting: forwardRef(() => InputSearch) } @Component({ selector: "rd-input-search", template: `
`, providers: [provider] }) export class InputSearch extends InputBase implements OnInit, OnChanges { constructor(private element: ElementRef) { super(); } @Input("rd-model") model: string; @Output("rd-modelChange") modelChange: EventEmitter = new EventEmitter(); @Output("rd-change") changeEvent: EventEmitter = new EventEmitter(); @Output("rd-enter") enterEvent: EventEmitter = new EventEmitter(); @Output("rd-onClear") onClear: EventEmitter = new EventEmitter(); @Input("rd-warning-text") warningText: string = RdLib.localization.translateEn('Can Not Call Empty Search'); @Input("rd-default") default: string; @Input("rd-placeholder") placeholder: string = ''; @Input("rd-disabled") disabled: boolean; @Input("rd-required") required: boolean; @Input("rd-min-search-length") minLength: number = 0; @Input("rd-onInitialized-focus") onInitializedFocus: boolean = false; @Input("rd-height") height: number | string = "27"; ngOnInit() { this.checkDefault(); this.container = this.jQuery(this.element.nativeElement).find("#dxElement"); this.container.dxTextBox({ onChange: (e) => { if (this.dxElement.hasOwnProperty("_value")) this.onChange(this.dxElement._value); else this.onChange(e.component._options.value); }, onKeyDown: (event) => { if (event.jQueryEvent.keyCode === 13) { setTimeout(() => { if (this.dxElement.hasOwnProperty("_value")) this.onEnter(this.dxElement._value); else this.onEnter(this.dxElement._options.value); }); } }, onValueChanged: (e) => { if (!this.dxElement.option('text')) { this.onClear.emit(true); this.onChange(null); } }, onInitialized: (e) => { setTimeout(() => { if (this.onInitializedFocus) e.component.focus(); }); }, mode: 'search', value: this.model, disabled: this.disabled, placeholder: this.placeholder }); this.dxElement = this.container.dxTextBox('instance'); if (this.dxElement.hasOwnProperty("_value")) this.model = this.dxElement._value; //this.updateValidator(); } ngOnChanges(changes) { this.checkDevExpressChange(); if (!this.dxElement) return; if (changes.required || changes.minLength) this.updateValidator(); if (changes.model) this.dxElement.option('value', this.model); if (changes.disabled) this.dxElement.option('disabled', this.disabled); if (changes.placeholder) this.dxElement.option('placeholder', this.placeholder); } private checkDevExpressChange() { setTimeout(() => { if (this.dxElement.hasOwnProperty("_value") && this.model != this.dxElement._value) { this.onChange(this.dxElement._value); } }); }; public onEnter(value) { if (this.isValid()) this.enterEvent.emit(value); } }