UNPKG

@asi-ngtools/lib

Version:

This project is a little components library, simple to use, which will help you to simplify your project.

223 lines (222 loc) 15.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { DefaultControlValueAccessor } from './../common/default-control-value-accessor'; import { NG_VALUE_ACCESSOR, FormControl } from '@angular/forms'; import { debounceTime } from 'rxjs/operators'; import { Component, forwardRef, Input, Output, EventEmitter, ElementRef, ViewChild, Renderer2 } from '@angular/core'; import * as nh from '../../native-helper'; export class AsiInputIconComponent extends DefaultControlValueAccessor { /** * @param {?} renderer * @param {?} elementRef */ constructor(renderer, elementRef) { super(); this.renderer = renderer; this.elementRef = elementRef; /** * html input type */ this.type = 'text'; /** * Label position */ this.labelPosition = 'top'; /** * Placeholder to display */ this.placeholder = ''; /** * Icon position */ this.iconPosition = 'left'; /** * Max length of the text */ this.maxlength = -1; /** * Delay before the component change value */ this.delay = 0; /** * Must be a number (internaly set the regex to ^-*[0-9,\.]*$ */ this.number = false; /** * Event emitted when the icon is clicked */ this.iconClicked = new EventEmitter(); this.inputControl = new FormControl(); } /** * @return {?} */ ngOnInit() { this.renderer.addClass(this.elementRef.nativeElement, 'label-' + this.labelPosition); if (this.number === true) { this.pattern = new RegExp('^-*[0-9,\.]*$'); } } /** * @return {?} */ ngAfterViewInit() { this.inputControl.valueChanges.pipe(debounceTime(this.delay)).subscribe((value) => { if (value === '') { this.value = null; } else if (this.isValide(value)) { this.value = value; } else if (this.maxlength !== -1 && value.length > this.maxlength) { // if value is too long, we truncate this.value = value.substr(0, this.maxlength); } this.inputElm.nativeElement.value = this._value; }); } /** * @param {?} value * @return {?} */ isValide(value) { return value == null || ((this.maxlength === -1 || value.length <= this.maxlength) && (this.pattern == null || this.pattern.test(value))); } /** * @param {?} value * @return {?} */ writeValue(value) { if (this.isValide(value)) { this.inputControl.setValue(value, { emitEvent: false }); } else if (this.maxlength !== -1 && value.length > this.maxlength) { // Length incorrect on truncate this.inputControl.setValue(nh.truncate(value, this.maxlength), { emitEvent: false }); } else { // Pattern incorrect this.inputElm.nativeElement.value = 'Incorrect value'; } } /** * @return {?} */ handleIconClick() { this.iconClicked.emit(); } } AsiInputIconComponent.decorators = [ { type: Component, args: [{ selector: 'asi-input-icon', host: { 'class': 'asi-component asi-input-icon' }, template: "<label class=\"input-label\" *ngIf=\"label != null\">{{label | translate}}</label>\n<div class=\"input-panel\" [ngClass]=\"{'icon-left': iconPosition=='left', 'icon-right': iconPosition=='right'}\">\n <asi-button (click)=\"handleIconClick()\" [disabled]=\"iconClicked.observers.length === 0\">\n <asi-fa-icon [icon]=\"icon\" [disabled]=\"iconClicked.observers.length === 0\"></asi-fa-icon>\n </asi-button>\n <input #asiInputIcon \n [attr.id]=\"id\" \n [attr.name]=\"name\"\n [attr.type]=\"type\" \n [attr.disabled]=\"disabled ? '' : null\" \n class=\"asi-focus-error\" \n [placeholder]=\"placeholder\"\n [formControl]=\"inputControl\" />\n</div>", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => AsiInputIconComponent), multi: true } ] }] } ]; /** @nocollapse */ AsiInputIconComponent.ctorParameters = () => [ { type: Renderer2 }, { type: ElementRef } ]; AsiInputIconComponent.propDecorators = { id: [{ type: Input }], name: [{ type: Input }], type: [{ type: Input }], label: [{ type: Input }], labelPosition: [{ type: Input }], placeholder: [{ type: Input }], icon: [{ type: Input }], iconPosition: [{ type: Input }], pattern: [{ type: Input }], maxlength: [{ type: Input }], delay: [{ type: Input }], number: [{ type: Input }], iconClicked: [{ type: Output, args: ['iconClicked',] }], inputElm: [{ type: ViewChild, args: ['asiInputIcon',] }] }; if (false) { /** * html id * @type {?} */ AsiInputIconComponent.prototype.id; /** * html name * @type {?} */ AsiInputIconComponent.prototype.name; /** * html input type * @type {?} */ AsiInputIconComponent.prototype.type; /** * Label to display (is translated) * @type {?} */ AsiInputIconComponent.prototype.label; /** * Label position * @type {?} */ AsiInputIconComponent.prototype.labelPosition; /** * Placeholder to display * @type {?} */ AsiInputIconComponent.prototype.placeholder; /** * Icon to display * @type {?} */ AsiInputIconComponent.prototype.icon; /** * Icon position * @type {?} */ AsiInputIconComponent.prototype.iconPosition; /** * Allow you to define a regex that the input must respect * @type {?} */ AsiInputIconComponent.prototype.pattern; /** * Max length of the text * @type {?} */ AsiInputIconComponent.prototype.maxlength; /** * Delay before the component change value * @type {?} */ AsiInputIconComponent.prototype.delay; /** * Must be a number (internaly set the regex to ^-*[0-9,\.]*$ * @type {?} */ AsiInputIconComponent.prototype.number; /** * Event emitted when the icon is clicked * @type {?} */ AsiInputIconComponent.prototype.iconClicked; /** @type {?} */ AsiInputIconComponent.prototype.inputControl; /** @type {?} */ AsiInputIconComponent.prototype.inputElm; /** @type {?} */ AsiInputIconComponent.prototype.renderer; /** @type {?} */ AsiInputIconComponent.prototype.elementRef; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLWlucHV0LWljb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFzaS1uZ3Rvb2xzL2xpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FzaS1pbnB1dC1pY29uL2FzaS1pbnB1dC1pY29uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDekYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQ0wsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFVLFlBQVksRUFDMUQsVUFBVSxFQUFFLFNBQVMsRUFBaUIsU0FBUyxFQUNoRCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBYzFDLE1BQU0sNEJBQTZCLFNBQVEsMkJBQTJCOzs7OztJQXdDcEUsWUFBb0IsUUFBbUIsRUFDN0I7UUFDUixLQUFLLEVBQUUsQ0FBQztRQUZVLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDN0IsZUFBVSxHQUFWLFVBQVU7Ozs7b0JBbENpQixNQUFNOzs7OzZCQUtvRCxLQUFLOzs7OzJCQUU3RSxFQUFFOzs7OzRCQUtpQixNQUFNOzs7O3lCQU0zQixDQUFDLENBQUM7Ozs7cUJBR04sQ0FBQzs7OztzQkFHQSxLQUFLOzs7OzJCQUdjLElBQUksWUFBWSxFQUFPOzRCQUU3QyxJQUFJLFdBQVcsRUFBRTtLQU8vQjs7OztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JGLEVBQUUsQ0FBQyxDQUFD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U0FBUztZQUEvQyxVQUFVOzs7aUJBb0JULEtBQUs7bUJBRUwsS0FBSzttQkFFTCxLQUFLO29CQUdMLEtBQUs7NEJBRUwsS0FBSzswQkFFTCxLQUFLO21CQUdMLEtBQUs7MkJBRUwsS0FBSztzQkFHTCxLQUFLO3dCQUdMLEtBQUs7b0JBR0wsS0FBSztxQkFHTCxLQUFLOzBCQUdMLE1BQU0sU0FBQyxhQUFhO3VCQUlwQixTQUFTLFNBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlZmF1bHRDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJy4vLi4vY29tbW9uL2RlZmF1bHQtY29udHJvbC12YWx1ZS1hY2Nlc3Nvcic7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsIGZvcndhcmRSZWYsIElucHV0LCBPdXRwdXQsIE9uSW5pdCwgRXZlbnRFbWl0dGVyLFxuICBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQsIFJlbmRlcmVyMlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0ICogYXMgbmggZnJvbSAnLi4vLi4vbmF0aXZlLWhlbHBlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FzaS1pbnB1dC1pY29uJyxcbiAgaG9zdDogeyAnY2xhc3MnOiAnYXNpLWNvbXBvbmVudCBhc2ktaW5wdXQtaWNvbicgfSxcbiAgdGVtcGxhdGVVcmw6ICdhc2ktaW5wdXQtaWNvbi5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQXNpSW5wdXRJY29uQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEFzaUlucHV0SWNvbkNvbXBvbmVudCBleHRlbmRzIERlZmF1bHRDb250cm9sVmFsdWVBY2Nlc3NvciBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgLyoqIGh0bWwgaWQgKi9cbiAgQElucHV0KCkgaWQ6IHN0cmluZztcbiAgLyoqIGh0bWwgbmFtZSAqL1xuICBASW5wdXQoKSBuYW1lOiBzdHJpbmc7XG4gIC8qKiBodG1sIGlucHV0IHR5cGUgKi9cbiAgQElucHV0KCkgdHlwZTogJ3Bhc3N3b3JkJyB8ICd0ZXh0JyA9ICd0ZXh0JztcblxuICAvKiogTGFiZWwgdG8gZGlzcGxheSAoaXMgdHJhbnNsYXRlZCkgKi9cbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcbiAgLyoqIExhYmVsIHBvc2l0aW9uICovXG4gIEBJbnB1dCgpIGxhYmVsUG9zaXRpb246ICd0b3AnIHwgJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdib3R0b20nIHwgJ2JvdHRvbS1jZW50ZXInIHwgJ3RvcC1jZW50ZXInID0gJ3RvcCc7XG4gIC8qKiBQbGFjZWhvbGRlciB0byBkaXNwbGF5ICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XG5cbiAgLyoqIEljb24gdG8gZGlzcGxheSAqL1xuICBASW5wdXQoKSBpY29uOiBzdHJpbmc7XG4gIC8qKiBJY29uIHBvc2l0aW9uICovXG4gIEBJbnB1dCgpIGljb25Qb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JyA9ICdsZWZ0JztcblxuICAvKiogQWxsb3cgeW91IHRvIGRlZmluZSBhIHJlZ2V4IHRoYXQgdGhlIGlucHV0IG11c3QgcmVzcGVjdCAqL1xuICBASW5wdXQoKSBwYXR0ZXJuOiBSZWdFeHA7XG5cbiAgLyoqIE1heCBsZW5ndGggb2YgdGhlIHRleHQgKi9cbiAgQElucHV0KCkgbWF4bGVuZ3RoID0gLTE7XG5cbiAgLyoqIERlbGF5IGJlZm9yZSB0aGUgY29tcG9uZW50IGNoYW5nZSB2YWx1ZSAqL1xuICBASW5wdXQoKSBkZWxheSA9IDA7XG5cbiAgLyoqIE11c3QgYmUgYSBudW1iZXIgKGludGVybmFseSBzZXQgdGhlIHJlZ2V4IHRvIF4tKlswLTksXFwuXSokICovXG4gIEBJbnB1dCgpIG51bWJlciA9IGZhbHNlO1xuXG4gIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGljb24gaXMgY2xpY2tlZCAqL1xuICBAT3V0cHV0KCdpY29uQ2xpY2tlZCcpIGljb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgaW5wdXRDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG5cbiAgQFZpZXdDaGlsZCgnYXNpSW5wdXRJY29uJykgaW5wdXRFbG06IEVsZW1lbnRSZWY7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnbGFiZWwtJyArIHRoaXMubGFiZWxQb3NpdGlvbik7XG4gICAgaWYgKHRoaXMubnVtYmVyID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnBhdHRlcm4gPSBuZXcgUmVnRXhwKCdeLSpbMC05LFxcLl0qJCcpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmlucHV0Q29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWxheSkpLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1ZhbGlkZSh2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1heGxlbmd0aCAhPT0gLTEgJiYgdmFsdWUubGVuZ3RoID4gdGhpcy5tYXhsZW5ndGgpIHtcbiAgICAgICAgLy8gaWYgdmFsdWUgaXMgdG9vIGxvbmcsIHdlIHRydW5jYXRlXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZS5zdWJzdHIoMCwgdGhpcy5tYXhsZW5ndGgpO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnB1dEVsbS5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5fdmFsdWU7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzVmFsaWRlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCAoKHRoaXMubWF4bGVuZ3RoID09PSAtMSB8fCB2YWx1ZS5sZW5ndGggPD0gdGhpcy5tYXhsZW5ndGgpXG4gICAgICAmJiAodGhpcy5wYXR0ZXJuID09IG51bGwgfHwgdGhpcy5wYXR0ZXJuLnRlc3QodmFsdWUpKSlcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzVmFsaWRlKHZhbHVlKSkge1xuICAgICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWF4bGVuZ3RoICE9PSAtMSAmJiB2YWx1ZS5sZW5ndGggPiB0aGlzLm1heGxlbmd0aCkge1xuICAgICAgLy8gTGVuZ3RoIGluY29ycmVjdCBvbiB0cnVuY2F0ZVxuICAgICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUobmgudHJ1bmNhdGUodmFsdWUsIHRoaXMubWF4bGVuZ3RoKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQYXR0ZXJuIGluY29ycmVjdFxuICAgICAgdGhpcy5pbnB1dEVsbS5uYXRpdmVFbGVtZW50LnZhbHVlID0gJ0luY29ycmVjdCB2YWx1ZSc7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhhbmRsZUljb25DbGljaygpIHtcbiAgICB0aGlzLmljb25DbGlja2VkLmVtaXQoKTtcbiAgfVxufVxuIl19