UNPKG

ngx-form-control

Version:
173 lines (169 loc) 13.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Component, Input, ViewChild } from '@angular/core'; import { NG_VALIDATORS, NG_VALUE_ACCESSOR, NgModel, } from '@angular/forms'; import { BaseControlComponent } from '../../utils/base-control.component'; export class FormTextareaComponent extends BaseControlComponent { constructor() { super(...arguments); this.rows = 5; this.readonly = false; this.trimResult = true; this.minLengthErrorMessage = 'Value is too short.'; } /** * @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 hasMinLengthError() { return this.customTextarea.errors && this.customTextarea.errors['minlength']; } /** * @return {?} */ get invalid() { if (this.hasCustomError) { return true; } if (!this.customTextarea.touched) { return false; } return this.customTextarea.invalid || this.hasRequiredError; } /** * @return {?} */ get valid() { if (this.hasCustomError) { return false; } if (!this.customTextarea.touched) { return false; } return !this.customTextarea.invalid && !this.hasRequiredError; } /** * @return {?} */ get errorMessages() { if (this.hasRequiredError) { return [this.requiredErrorMessage]; } 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.customTextarea.errors || {}; if (this.hasRequiredError) { result['required'] = true; } else { delete result['required']; } return result; } /** * @return {?} */ reset() { this.customTextarea.reset(); } } FormTextareaComponent.decorators = [ { type: Component, args: [{ selector: 'ngx-form-textarea', template: `<label *ngIf="label" [for]="id">{{label}}</label> <!--suppress HtmlFormInputWithoutLabel --> <textarea class="form-control" [ngClass]="{'is-invalid': invalid, 'is-valid': valid}" [id]="id" [title]="title" [required]="required" [disabled]="disabled" [readonly]="readonly" [minlength]="minlength" [maxlength]="maxlength" [placeholder]="placeholder" [(ngModel)]="value" [rows]="rows" #customTextarea="ngModel"></textarea> <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: FormTextareaComponent, multi: true }, { provide: NG_VALIDATORS, useExisting: FormTextareaComponent, multi: true } ] },] }, ]; FormTextareaComponent.propDecorators = { rows: [{ type: Input }], readonly: [{ type: Input }], minlength: [{ type: Input }], maxlength: [{ type: Input }], trimResult: [{ type: Input }], minLengthErrorMessage: [{ type: Input }], customTextarea: [{ type: ViewChild, args: ['customTextarea',] }] }; if (false) { /** @type {?} */ FormTextareaComponent.prototype.rows; /** @type {?} */ FormTextareaComponent.prototype.readonly; /** @type {?} */ FormTextareaComponent.prototype.minlength; /** @type {?} */ FormTextareaComponent.prototype.maxlength; /** @type {?} */ FormTextareaComponent.prototype.trimResult; /** @type {?} */ FormTextareaComponent.prototype.minLengthErrorMessage; /** @type {?} */ FormTextareaComponent.prototype.customTextarea; /** @type {?} */ FormTextareaComponent.prototype._innerValue; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS10ZXh0YXJlYS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZm9ybS1jb250cm9sLyIsInNvdXJjZXMiOlsibGliL2Zvcm0tdGV4dGFyZWEvZm9ybS10ZXh0YXJlYS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUMsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sR0FBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQW1DeEUsTUFBTSw0QkFBNkIsU0FBUSxvQkFBb0I7OztvQkFFN0MsQ0FBQzt3QkFDRyxLQUFLOzBCQUdILElBQUk7cUNBQ08scUJBQXFCOzs7OztJQUl0RCxJQUFJLEtBQUs7UUFDUCxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxFQUFFLENBQUM7U0FDWDtRQUVELEVBQUUsQ0FBQyxDQUFDLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQ3pCO1FBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7S0FDckU7Ozs7O0lBRUQsSUFBSSxLQUFLLENBQUMsS0FBYTtRQUNyQixFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLGFBQWEs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bnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBOZ01vZGVsLCBWYWxpZGF0aW9uRXJyb3JzLH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0Jhc2VDb250cm9sQ29tcG9uZW50fSBmcm9tICcuLi8uLi91dGlscy9iYXNlLWNvbnRyb2wuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmd4LWZvcm0tdGV4dGFyZWEnLFxyXG4gIHRlbXBsYXRlOiBgPGxhYmVsICpuZ0lmPVwibGFiZWxcIiBbZm9yXT1cImlkXCI+e3tsYWJlbH19PC9sYWJlbD5cclxuXHJcbjwhLS1zdXBwcmVzcyBIdG1sRm9ybUlucHV0V2l0aG91dExhYmVsIC0tPlxyXG48dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJzogaW52YWxpZCwgJ2lzLXZhbGlkJzogdmFsaWR9XCJcclxuICAgICAgICAgIFtpZF09XCJpZFwiXHJcbiAgICAgICAgICBbdGl0bGVdPVwidGl0bGVcIlxyXG4gICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgICAgICAgW21pbmxlbmd0aF09XCJtaW5sZW5ndGhcIlxyXG4gICAgICAgICAgW21heGxlbmd0aF09XCJtYXhsZW5ndGhcIlxyXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxyXG4gICAgICAgICAgW3Jvd3NdPVwicm93c1wiXHJcbiAgICAgICAgICAjY3VzdG9tVGV4dGFyZWE9XCJuZ01vZGVsXCI+PC90ZXh0YXJlYT5cclxuXHJcbjxkaXYgY2xhc3M9XCJ2YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwidmFsaWQgJiYgdmFsaWRNZXNzYWdlXCI+e3t2YWxpZE1lc3NhZ2V9fTwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImludmFsaWRcIj5cclxuICA8c3BhbiAqbmdGb3I9XCJsZXQgbWVzc2FnZSBvZiBlcnJvck1lc3NhZ2VzOyBsZXQgbGFzdCA9IGxhc3Q7XCI+XHJcbiAgICB7e21lc3NhZ2V9fTxiciAqbmdJZj1cIiFsYXN0XCI+XHJcbiAgPC9zcGFuPlxyXG48L2Rpdj5cclxuYCxcclxuICBzdHlsZXM6IFtgYF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBGb3JtVGV4dGFyZWFDb21wb25lbnQsIG11bHRpOiB0cnVlfSxcclxuICAgIHtwcm92aWRlOiBOR19WQUxJREFUT1JTLCB1c2VFeGlzdGluZzogRm9ybVRleHRhcmVhQ29tcG9uZW50LCBtdWx0aTogdHJ1ZX1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtVGV4dGFyZWFDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29udHJvbENvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIHJvd3MgPSA1O1xyXG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbWlubGVuZ3RoOiBudW1iZXI7XHJcbiAgQElucHV0KCkgbWF4bGVuZ3RoOiBudW1iZXI7XHJcbiAgQElucHV0KCkgdHJpbVJlc3VsdCA9IHRydWU7XHJcbiAgQElucHV0KCkgbWluTGVuZ3RoRXJyb3JNZXNzYWdlID0gJ1ZhbHVlIGlzIHRvbyBzaG9ydC4nO1xyXG4gIEBWaWV3Q2hpbGQoJ2N1c3RvbVRleHRhcmVhJykgY3VzdG9tVGV4dGFyZWE6IE5nTW9kZWw7XHJcbiAgcHJpdmF0ZSBfaW5uZXJWYWx1ZTogc3RyaW5nO1xyXG5cclxuICBnZXQgdmFsdWUoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5faW5uZXJWYWx1ZSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCdzdHJpbmcnICE9PSB0eXBlb2YgdGhpcy5faW5uZXJWYWx1ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5faW5uZXJWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy50cmltUmVzdWx0ID8gdGhpcy5faW5uZXJWYWx1ZS50cmltKCkgOiB0aGlzLl9pbm5lclZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5faW5uZXJWYWx1ZSkge1xyXG4gICAgICB0aGlzLl9pbm5lclZhbHVlID0gdmFsdWU7XHJcbiAgICAgIHRoaXMudHJpZ2dlckNoYW5nZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc01pbkxlbmd0aEVycm9yKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tVGV4dGFyZWEuZXJyb3JzICYmIHRoaXMuY3VzdG9tVGV4dGFyZWEuZXJyb3JzWydtaW5sZW5ndGgnXTtcclxuICB9XHJcblxyXG4gIGdldCBpbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuaGFzQ3VzdG9tRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmN1c3RvbVRleHRhcmVhLnRvdWNoZWQpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmN1c3RvbVRleHRhcmVhLmludmFsaWQgfHwgdGhpcy5oYXNSZXF1aXJlZEVycm9yO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuaGFzQ3VzdG9tRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5jdXN0b21UZXh0YXJlYS50b3VjaGVkKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gIXRoaXMuY3VzdG9tVGV4dGFyZWEuaW52YWxpZCAmJiAhdGhpcy5oYXNSZXF1aXJlZEVycm9yO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVycm9yTWVzc2FnZXMoKTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICBpZiAodGhpcy5oYXNSZXF1aXJlZEVycm9yKSB7XHJcbiAgICAgIHJldHVybiBbdGhpcy5yZXF1aXJlZEVycm9yTWVzc2FnZV07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaGFzTWluTGVuZ3RoRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIFt0aGlzLm1pbkxlbmd0aEVycm9yTWVzc2FnZV07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaGFzQ3VzdG9tRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5uZXJDdXN0b21FcnJvck1lc3NhZ2VzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbm5lclZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZSgpOiBWYWxpZGF0aW9uRXJyb3JzIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY3VzdG9tVGV4dGFyZWEuZXJyb3JzIHx8IHt9O1xyXG5cclxuICAgIGlmICh0aGlzLmhhc1JlcXVpcmVkRXJyb3IpIHtcclxuICAgICAgcmVzdWx0WydyZXF1aXJlZCddID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRlbGV0ZSByZXN1bHRbJ3JlcXVpcmVkJ107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vIG5vaW5zcGVjdGlvbiBKU1VudXNlZEdsb2JhbFN5bWJvbHNcclxuICByZXNldCgpIHtcclxuICAgIHRoaXMuY3VzdG9tVGV4dGFyZWEucmVzZXQoKTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==