@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
JavaScript
/**
* @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