UNPKG

ngx-form-control

Version:
248 lines (244 loc) 18.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core'; import { NG_VALIDATORS, NG_VALUE_ACCESSOR, NgModel } from '@angular/forms'; import { BaseControlComponent } from '../../utils/base-control.component'; export class FormInputComponent extends BaseControlComponent { constructor() { super(...arguments); this.type = 'text'; this.pattern = ''; this.readonly = false; this.autocomplete = true; this.trimResult = true; this.minLengthErrorMessage = 'Value is too short.'; this.patternErrorMessage = 'Value is not valid.'; this.matchErrorMessage = 'Value does not match.'; this.focus = new EventEmitter(); this.blur = new EventEmitter(); } /** * @param {?} value * @return {?} */ set match(value) { this._match = value || ''; this.triggerChange(); } /** * @return {?} */ get value() { if (!this._innerValue) { return ''; } if ('string' !== typeof this._innerValue) { return this._innerValue; } return this.trimResult ? this._innerValue.trim() : this._innerValue; } /** * @param {?} value * @return {?} */ set value(value) { if (value !== this._innerValue) { this._innerValue = value; this.triggerChange(); } } /** * @return {?} */ get hasMatchError() { return !!this._match && this._match !== this.value; } /** * @return {?} */ get hasPatternError() { return this.customInput.errors && this.customInput.errors['pattern']; } /** * @return {?} */ get hasMinLengthError() { return this.customInput.errors && this.customInput.errors['minlength']; } /** * @return {?} */ get invalid() { if (this.hasCustomError) { return true; } if (!this.customInput.touched) { return false; } return this.customInput.invalid || this.hasMatchError || this.hasRequiredError; } /** * @return {?} */ get valid() { if (this.hasCustomError) { return false; } if (!this.customInput.touched) { return false; } return !this.customInput.invalid && !this.hasMatchError && !this.hasRequiredError; } /** * @return {?} */ get errorMessages() { if (this.hasRequiredError) { return [this.requiredErrorMessage]; } if (this.hasMatchError) { return [this.matchErrorMessage]; } if (this.hasPatternError) { return [this.patternErrorMessage]; } if (this.hasMinLengthError) { return [this.minLengthErrorMessage]; } if (this.hasCustomError) { return this.innerCustomErrorMessages; } } /** * @param {?} value * @return {?} */ writeValue(value) { this._innerValue = value; } /** * @return {?} */ validate() { /** @type {?} */ const result = this.customInput.errors || {}; if (this.hasRequiredError) { result['required'] = true; } else { delete result['required']; } if (this.hasMatchError) { result['match'] = true; } return result; } /** * @return {?} */ reset() { this.customInput.reset(); } /** * @param {?} event * @return {?} */ onFocus(event) { this.focus.emit(event); } /** * @param {?} event * @return {?} */ onBlur(event) { this.blur.emit(event); } } FormInputComponent.decorators = [ { type: Component, args: [{ selector: 'ngx-form-input', template: `<label *ngIf="label" [for]="id">{{label}}</label> <!--suppress HtmlFormInputWithoutLabel --> <input class="form-control" [ngClass]="{'is-invalid': invalid, 'is-valid': valid}" [type]="type" [id]="id" [required]="required" [disabled]="disabled" [readonly]="readonly" [minlength]="minlength" [maxlength]="maxlength" [placeholder]="placeholder" [title]="title" [pattern]="pattern" [(ngModel)]="value" (input)="triggerChange()" [autocomplete]="autocomplete ? 'on' : 'off'" (focus)="onFocus($event)" (blur)="onBlur($event)" #customInput="ngModel"> <div class="valid-feedback" *ngIf="valid && validMessage">{{validMessage}}</div> <div class="invalid-feedback" *ngIf="invalid"> <span *ngFor="let message of errorMessages; let last = last;"> {{message}}<br *ngIf="!last"> </span> </div> `, styles: [``], providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: FormInputComponent, multi: true }, { provide: NG_VALIDATORS, useExisting: FormInputComponent, multi: true } ] },] }, ]; FormInputComponent.propDecorators = { type: [{ type: Input }], pattern: [{ type: Input }], readonly: [{ type: Input }], autocomplete: [{ type: Input }], minlength: [{ type: Input }], maxlength: [{ type: Input }], trimResult: [{ type: Input }], minLengthErrorMessage: [{ type: Input }], patternErrorMessage: [{ type: Input }], matchErrorMessage: [{ type: Input }], customInput: [{ type: ViewChild, args: ['customInput',] }], match: [{ type: Input }], focus: [{ type: Output }], blur: [{ type: Output }] }; if (false) { /** @type {?} */ FormInputComponent.prototype.type; /** @type {?} */ FormInputComponent.prototype.pattern; /** @type {?} */ FormInputComponent.prototype.readonly; /** @type {?} */ FormInputComponent.prototype.autocomplete; /** @type {?} */ FormInputComponent.prototype.minlength; /** @type {?} */ FormInputComponent.prototype.maxlength; /** @type {?} */ FormInputComponent.prototype.trimResult; /** @type {?} */ FormInputComponent.prototype.minLengthErrorMessage; /** @type {?} */ FormInputComponent.prototype.patternErrorMessage; /** @type {?} */ FormInputComponent.prototype.matchErrorMessage; /** @type {?} */ FormInputComponent.prototype.customInput; /** @type {?} */ FormInputComponent.prototype.focus; /** @type {?} */ FormInputComponent.prototype.blur; /** @type {?} */ FormInputComponent.prototype._innerValue; /** @type {?} */ FormInputComponent.prototype._match; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZm9ybS1jb250cm9sLyIsInNvdXJjZXMiOlsibGliL2Zvcm0taW5wdXQvZm9ybS1pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBQyxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFtQixNQUFNLGdCQUFnQixDQUFDO0FBQzNGLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBd0N4RSxNQUFNLHlCQUEwQixTQUFRLG9CQUFvQjs7O29CQUUxQyxNQUFNO3VCQUNILEVBQUU7d0JBQ0QsS0FBSzs0QkFDRCxJQUFJOzBCQUdOLElBQUk7cUNBQ08scUJBQXFCO21DQUN2QixxQkFBcUI7aUNBQ3ZCLHVCQUF1QjtxQkFRbEMsSUFBSSxZQUFZLEVBQU87b0JBQ3hCLElBQUksWUFBWSxFQUFPOzs7Ozs7SUFOeEMsSUFBYSxLQUFLLENBQUMsS0FBYTtRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0tBQ3RCOzs7O0lBUUQsSUFBSSxLQUFLO1FBQ1AsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN0QixNQUFNLENBQUMsRUFBRSxDQUFDO1NBQ1g7UUFFRCxFQUFFLENBQUMsQ0FBQyxRQUFRLEtBQUssT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUN6QjtRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJ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d0JBQ0wsS0FBSzt3QkFDTCxLQUFLO3lCQUNMLEtBQUs7b0NBQ0wsS0FBSztrQ0FDTCxLQUFLO2dDQUNMLEtBQUs7MEJBQ0wsU0FBUyxTQUFDLGFBQWE7b0JBRXZCLEtBQUs7b0JBS0wsTUFBTTttQkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgTmdNb2RlbCwgVmFsaWRhdGlvbkVycm9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0Jhc2VDb250cm9sQ29tcG9uZW50fSBmcm9tICcuLi8uLi91dGlscy9iYXNlLWNvbnRyb2wuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmd4LWZvcm0taW5wdXQnLFxyXG4gIHRlbXBsYXRlOiBgPGxhYmVsICpuZ0lmPVwibGFiZWxcIiBbZm9yXT1cImlkXCI+e3tsYWJlbH19PC9sYWJlbD5cclxuXHJcbjwhLS1zdXBwcmVzcyBIdG1sRm9ybUlucHV0V2l0aG91dExhYmVsIC0tPlxyXG48aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJzogaW52YWxpZCwgJ2lzLXZhbGlkJzogdmFsaWR9XCJcclxuICAgICAgIFt0eXBlXT1cInR5cGVcIlxyXG4gICAgICAgW2lkXT1cImlkXCJcclxuICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXHJcbiAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgIFttaW5sZW5ndGhdPVwibWlubGVuZ3RoXCJcclxuICAgICAgIFttYXhsZW5ndGhdPVwibWF4bGVuZ3RoXCJcclxuICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXHJcbiAgICAgICBbdGl0bGVdPVwidGl0bGVcIlxyXG4gICAgICAgW3BhdHRlcm5dPVwicGF0dGVyblwiXHJcbiAgICAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcclxuICAgICAgIChpbnB1dCk9XCJ0cmlnZ2VyQ2hhbmdlKClcIlxyXG4gICAgICAgW2F1dG9jb21wbGV0ZV09XCJhdXRvY29tcGxldGUgPyAnb24nIDogJ29mZidcIlxyXG4gICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXHJcbiAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXHJcbiAgICAgICAjY3VzdG9tSW5wdXQ9XCJuZ01vZGVsXCI+XHJcblxyXG48ZGl2IGNsYXNzPVwidmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cInZhbGlkICYmIHZhbGlkTWVzc2FnZVwiPnt7dmFsaWRNZXNzYWdlfX08L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJpbnZhbGlkXCI+XHJcbiAgPHNwYW4gKm5nRm9yPVwibGV0IG1lc3NhZ2Ugb2YgZXJyb3JNZXNzYWdlczsgbGV0IGxhc3QgPSBsYXN0O1wiPlxyXG4gICAge3ttZXNzYWdlfX08YnIgKm5nSWY9XCIhbGFzdFwiPlxyXG4gIDwvc3Bhbj5cclxuPC9kaXY+XHJcbmAsXHJcbiAgc3R5bGVzOiBbYGBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge3Byb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogRm9ybUlucHV0Q29tcG9uZW50LCBtdWx0aTogdHJ1ZX0sXHJcbiAgICB7cHJvdmlkZTogTkdfVkFMSURBVE9SUywgdXNlRXhpc3Rpbmc6IEZvcm1JbnB1dENvbXBvbmVudCwgbXVsdGk6IHRydWV9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybUlucHV0Q29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbnRyb2xDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSB0eXBlID0gJ3RleHQnO1xyXG4gIEBJbnB1dCgpIHBhdHRlcm4gPSAnJztcclxuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGF1dG9jb21wbGV0ZSA9IHRydWU7XHJcbiAgQElucHV0KCkgbWlubGVuZ3RoOiBudW1iZXI7XHJcbiAgQElucHV0KCkgbWF4bGVuZ3RoOiBudW1iZXI7XHJcbiAgQElucHV0KCkgdHJpbVJlc3VsdCA9IHRydWU7XHJcbiAgQElucHV0KCkgbWluTGVuZ3RoRXJyb3JNZXNzYWdlID0gJ1ZhbHVlIGlzIHRvbyBzaG9ydC4nO1xyXG4gIEBJbnB1dCgpIHBhdHRlcm5FcnJvck1lc3NhZ2UgPSAnVmFsdWUgaXMgbm90IHZhbGlkLic7XHJcbiAgQElucHV0KCkgbWF0Y2hFcnJvck1lc3NhZ2UgPSAnVmFsdWUgZG9lcyBub3QgbWF0Y2guJztcclxuICBAVmlld0NoaWxkKCdjdXN0b21JbnB1dCcpIGN1c3RvbUlucHV0OiBOZ01vZGVsO1xyXG5cclxuICBASW5wdXQoKSBzZXQgbWF0Y2godmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fbWF0Y2ggPSB2YWx1ZSB8fCAnJztcclxuICAgIHRoaXMudHJpZ2dlckNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIGZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfaW5uZXJWYWx1ZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX21hdGNoO1xyXG5cclxuICBnZXQgdmFsdWUoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5faW5uZXJWYWx1ZSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCdzdHJpbmcnICE9PSB0eXBlb2YgdGhpcy5faW5uZXJWYWx1ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5faW5uZXJWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy50cmltUmVzdWx0ID8gdGhpcy5faW5uZXJWYWx1ZS50cmltKCkgOiB0aGlzLl9pbm5lclZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5faW5uZXJWYWx1ZSkge1xyXG4gICAgICB0aGlzLl9pbm5lclZhbHVlID0gdmFsdWU7XHJcbiAgICAgIHRoaXMudHJpZ2dlckNoYW5nZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc01hdGNoRXJyb3IoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLl9tYXRjaCAmJiB0aGlzLl9tYXRjaCAhPT0gdGhpcy52YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBoYXNQYXR0ZXJuRXJyb3IoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jdXN0b21JbnB1dC5lcnJvcnMgJiYgdGhpcy5jdXN0b21JbnB1dC5lcnJvcnNbJ3BhdHRlcm4nXTtcclxuICB9XHJcblxyXG4gIGdldCBoYXNNaW5MZW5ndGhFcnJvcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmN1c3RvbUlucHV0LmVycm9ycyAmJiB0aGlzLmN1c3RvbUlucHV0LmVycm9yc1snbWlubGVuZ3RoJ107XHJcbiAgfVxyXG5cclxuICBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmhhc0N1c3RvbUVycm9yKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5jdXN0b21JbnB1dC50b3VjaGVkKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5jdXN0b21JbnB1dC5pbnZhbGlkIHx8IHRoaXMuaGFzTWF0Y2hFcnJvciB8fCB0aGlzLmhhc1JlcXVpcmVkRXJyb3I7XHJcbiAgfVxyXG5cclxuICBnZXQgdmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5oYXNDdXN0b21FcnJvcikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmN1c3RvbUlucHV0LnRvdWNoZWQpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAhdGhpcy5jdXN0b21JbnB1dC5pbnZhbGlkICYmICF0aGlzLmhhc01hdGNoRXJyb3IgJiYgIXRoaXMuaGFzUmVxdWlyZWRFcnJvcjtcclxuICB9XHJcblxyXG4gIGdldCBlcnJvck1lc3NhZ2VzKCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgaWYgKHRoaXMuaGFzUmVxdWlyZWRFcnJvcikge1xyXG4gICAgICByZXR1cm4gW3RoaXMucmVxdWlyZWRFcnJvck1lc3NhZ2VdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhhc01hdGNoRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIFt0aGlzLm1hdGNoRXJyb3JNZXNzYWdlXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5oYXNQYXR0ZXJuRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIFt0aGlzLnBhdHRlcm5FcnJvck1lc3NhZ2VdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhhc01pbkxlbmd0aEVycm9yKSB7XHJcbiAgICAgIHJldHVybiBbdGhpcy5taW5MZW5ndGhFcnJvck1lc3NhZ2VdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhhc0N1c3RvbUVycm9yKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmlubmVyQ3VzdG9tRXJyb3JNZXNzYWdlcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5faW5uZXJWYWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGUoKTogVmFsaWRhdGlvbkVycm9ycyB7XHJcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmN1c3RvbUlucHV0LmVycm9ycyB8fCB7fTtcclxuXHJcbiAgICBpZiAodGhpcy5oYXNSZXF1aXJlZEVycm9yKSB7XHJcbiAgICAgIHJlc3VsdFsncmVxdWlyZWQnXSA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkZWxldGUgcmVzdWx0WydyZXF1aXJlZCddO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhhc01hdGNoRXJyb3IpIHtcclxuICAgICAgcmVzdWx0WydtYXRjaCddID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8gbm9pbnNwZWN0aW9uIEpTVW51c2VkR2xvYmFsU3ltYm9sc1xyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5jdXN0b21JbnB1dC5yZXNldCgpO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1cyhldmVudCkge1xyXG4gICAgdGhpcy5mb2N1cy5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIG9uQmx1cihldmVudCkge1xyXG4gICAgdGhpcy5ibHVyLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19