UNPKG

@asi-ngtools/lib

Version:

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

243 lines (242 loc) 16.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; 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'; var AsiInputIconComponent = /** @class */ (function (_super) { tslib_1.__extends(AsiInputIconComponent, _super); function AsiInputIconComponent(renderer, elementRef) { var _this = _super.call(this) || this; _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 _this; } /** * @return {?} */ AsiInputIconComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.renderer.addClass(this.elementRef.nativeElement, 'label-' + this.labelPosition); if (this.number === true) { this.pattern = new RegExp('^-*[0-9,\.]*$'); } }; /** * @return {?} */ AsiInputIconComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { var _this = this; this.inputControl.valueChanges.pipe(debounceTime(this.delay)).subscribe(function (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 // if value is too long, we truncate _this.value = value.substr(0, _this.maxlength); } _this.inputElm.nativeElement.value = _this._value; }); }; /** * @param {?} value * @return {?} */ AsiInputIconComponent.prototype.isValide = /** * @param {?} value * @return {?} */ function (value) { return value == null || ((this.maxlength === -1 || value.length <= this.maxlength) && (this.pattern == null || this.pattern.test(value))); }; /** * @param {?} value * @return {?} */ AsiInputIconComponent.prototype.writeValue = /** * @param {?} value * @return {?} */ function (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 {?} */ AsiInputIconComponent.prototype.handleIconClick = /** * @return {?} */ function () { 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(function () { return AsiInputIconComponent; }), multi: true } ] }] } ]; /** @nocollapse */ AsiInputIconComponent.ctorParameters = function () { return [ { 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',] }] }; return AsiInputIconComponent; }(DefaultControlValueAccessor)); export { AsiInputIconComponent }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLWlucHV0LWljb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFzaS1uZ3Rvb2xzL2xpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FzaS1pbnB1dC1pY29uL2FzaS1pbnB1dC1pY29uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUNMLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBVSxZQUFZLEVBQzFELFVBQVUsRUFBRSxTQUFTLEVBQWlCLFNBQVMsRUFDaEQsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7SUFjQyxpREFBMkI7SUF3Q3BFLCtCQUFvQixRQUFtQixFQUM3QjtRQURWLFlBRUUsaUJBQU8sU0FDUjtRQUhtQixjQUFRLEdBQVIsUUFBUSxDQUFXO1FBQzdCLGdCQUFVLEdBQVYsVUFBVTs7OztxQkFsQ2lCLE1BQU07Ozs7OEJBS29ELEtBQUs7Ozs7NEJBRTdFLEVBQUU7Ozs7NkJBS2lCLE1BQU07Ozs7MEJBTTNCLENBQUMsQ0FBQzs7OztzQkFHTixDQUFDOzs7O3VCQUdBLEtBQUs7Ozs7NEJBR2MsSUFBSSxZQUFZLEVBQU87NkJBRTdDLElBQUksV0FBVyxFQUFFOztLQU8vQjs7OztJQUVELHdDQUFROzs7SUFBUjtRQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckYsRUFBRSxDQUFDLENBQUMsSUFBSSxD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cEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0Y7Ozs7Z0JBaEJ1QyxTQUFTO2dCQUEvQyxVQUFVOzs7cUJBb0JULEtBQUs7dUJBRUwsS0FBSzt1QkFFTCxLQUFLO3dCQUdMLEtBQUs7Z0NBRUwsS0FBSzs4QkFFTCxLQUFLO3VCQUdMLEtBQUs7K0JBRUwsS0FBSzswQkFHTCxLQUFLOzRCQUdMLEtBQUs7d0JBR0wsS0FBSzt5QkFHTCxLQUFLOzhCQUdMLE1BQU0sU0FBQyxhQUFhOzJCQUlwQixTQUFTLFNBQUMsY0FBYzs7Z0NBNUQzQjtFQXNCMkMsMkJBQTJCO1NBQXpELHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlZmF1bHRDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJy4vLi4vY29tbW9uL2RlZmF1bHQtY29udHJvbC12YWx1ZS1hY2Nlc3Nvcic7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsIGZvcndhcmRSZWYsIElucHV0LCBPdXRwdXQsIE9uSW5pdCwgRXZlbnRFbWl0dGVyLFxuICBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQsIFJlbmRlcmVyMlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0ICogYXMgbmggZnJvbSAnLi4vLi4vbmF0aXZlLWhlbHBlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FzaS1pbnB1dC1pY29uJyxcbiAgaG9zdDogeyAnY2xhc3MnOiAnYXNpLWNvbXBvbmVudCBhc2ktaW5wdXQtaWNvbicgfSxcbiAgdGVtcGxhdGVVcmw6ICdhc2ktaW5wdXQtaWNvbi5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQXNpSW5wdXRJY29uQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEFzaUlucHV0SWNvbkNvbXBvbmVudCBleHRlbmRzIERlZmF1bHRDb250cm9sVmFsdWVBY2Nlc3NvciBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgLyoqIGh0bWwgaWQgKi9cbiAgQElucHV0KCkgaWQ6IHN0cmluZztcbiAgLyoqIGh0bWwgbmFtZSAqL1xuICBASW5wdXQoKSBuYW1lOiBzdHJpbmc7XG4gIC8qKiBodG1sIGlucHV0IHR5cGUgKi9cbiAgQElucHV0KCkgdHlwZTogJ3Bhc3N3b3JkJyB8ICd0ZXh0JyA9ICd0ZXh0JztcblxuICAvKiogTGFiZWwgdG8gZGlzcGxheSAoaXMgdHJhbnNsYXRlZCkgKi9cbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcbiAgLyoqIExhYmVsIHBvc2l0aW9uICovXG4gIEBJbnB1dCgpIGxhYmVsUG9zaXRpb246ICd0b3AnIHwgJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdib3R0b20nIHwgJ2JvdHRvbS1jZW50ZXInIHwgJ3RvcC1jZW50ZXInID0gJ3RvcCc7XG4gIC8qKiBQbGFjZWhvbGRlciB0byBkaXNwbGF5ICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XG5cbiAgLyoqIEljb24gdG8gZGlzcGxheSAqL1xuICBASW5wdXQoKSBpY29uOiBzdHJpbmc7XG4gIC8qKiBJY29uIHBvc2l0aW9uICovXG4gIEBJbnB1dCgpIGljb25Qb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JyA9ICdsZWZ0JztcblxuICAvKiogQWxsb3cgeW91IHRvIGRlZmluZSBhIHJlZ2V4IHRoYXQgdGhlIGlucHV0IG11c3QgcmVzcGVjdCAqL1xuICBASW5wdXQoKSBwYXR0ZXJuOiBSZWdFeHA7XG5cbiAgLyoqIE1heCBsZW5ndGggb2YgdGhlIHRleHQgKi9cbiAgQElucHV0KCkgbWF4bGVuZ3RoID0gLTE7XG5cbiAgLyoqIERlbGF5IGJlZm9yZSB0aGUgY29tcG9uZW50IGNoYW5nZSB2YWx1ZSAqL1xuICBASW5wdXQoKSBkZWxheSA9IDA7XG5cbiAgLyoqIE11c3QgYmUgYSBudW1iZXIgKGludGVybmFseSBzZXQgdGhlIHJlZ2V4IHRvIF4tKlswLTksXFwuXSokICovXG4gIEBJbnB1dCgpIG51bWJlciA9IGZhbHNlO1xuXG4gIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGljb24gaXMgY2xpY2tlZCAqL1xuICBAT3V0cHV0KCdpY29uQ2xpY2tlZCcpIGljb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgaW5wdXRDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG5cbiAgQFZpZXdDaGlsZCgnYXNpSW5wdXRJY29uJykgaW5wdXRFbG06IEVsZW1lbnRSZWY7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnbGFiZWwtJyArIHRoaXMubGFiZWxQb3NpdGlvbik7XG4gICAgaWYgKHRoaXMubnVtYmVyID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnBhdHRlcm4gPSBuZXcgUmVnRXhwKCdeLSpbMC05LFxcLl0qJCcpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmlucHV0Q29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWxheSkpLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1ZhbGlkZSh2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1heGxlbmd0aCAhPT0gLTEgJiYgdmFsdWUubGVuZ3RoID4gdGhpcy5tYXhsZW5ndGgpIHtcbiAgICAgICAgLy8gaWYgdmFsdWUgaXMgdG9vIGxvbmcsIHdlIHRydW5jYXRlXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZS5zdWJzdHIoMCwgdGhpcy5tYXhsZW5ndGgpO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnB1dEVsbS5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5fdmFsdWU7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzVmFsaWRlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCAoKHRoaXMubWF4bGVuZ3RoID09PSAtMSB8fCB2YWx1ZS5sZW5ndGggPD0gdGhpcy5tYXhsZW5ndGgpXG4gICAgICAmJiAodGhpcy5wYXR0ZXJuID09IG51bGwgfHwgdGhpcy5wYXR0ZXJuLnRlc3QodmFsdWUpKSlcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzVmFsaWRlKHZhbHVlKSkge1xuICAgICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWF4bGVuZ3RoICE9PSAtMSAmJiB2YWx1ZS5sZW5ndGggPiB0aGlzLm1heGxlbmd0aCkge1xuICAgICAgLy8gTGVuZ3RoIGluY29ycmVjdCBvbiB0cnVuY2F0ZVxuICAgICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUobmgudHJ1bmNhdGUodmFsdWUsIHRoaXMubWF4bGVuZ3RoKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQYXR0ZXJuIGluY29ycmVjdFxuICAgICAgdGhpcy5pbnB1dEVsbS5uYXRpdmVFbGVtZW50LnZhbHVlID0gJ0luY29ycmVjdCB2YWx1ZSc7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhhbmRsZUljb25DbGljaygpIHtcbiAgICB0aGlzLmljb25DbGlja2VkLmVtaXQoKTtcbiAgfVxufVxuIl19