UNPKG

ngx-form-control

Version:
174 lines (170 loc) 15.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Component, ElementRef, ViewChild } from '@angular/core'; import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms'; import { BaseListControlComponent } from '../../utils/base-list-control.component'; export class FormCheckboxComponent extends BaseListControlComponent { constructor() { super(...arguments); this._isTouched = false; } /** * @return {?} */ get isEmpty() { return !this._selectedIndexes || !this._selectedIndexes.length; } /** * @return {?} */ get value() { return this.isEmpty ? null : this._selectedIndexes.map(index => this._selectOptions[index].value); } /** * @return {?} */ get invalid() { if (this.hasCustomError) { return true; } if (!this._isTouched) { return false; } return this.hasRequiredError; } /** * @return {?} */ get valid() { if (this.hasCustomError) { return false; } if (!this._isTouched) { return false; } return !this.hasRequiredError; } /** * @return {?} */ get errorMessages() { if (this.hasCustomError) { return this.innerCustomErrorMessages; } if (this.hasRequiredError) { return [this.requiredErrorMessage]; } } /** * @param {?} value * @return {?} */ writeValue(value) { /** @type {?} */ const listElement = this.listRadioElement.nativeElement.querySelectorAll('.custom-control-input'); for (const element of listElement) { element.checked = false; } if (!value) { return; } this._selectedIndexes = this.findIndexes(value); if (!this.listRadioElement || !this.listRadioElement.nativeElement) { return; } if (this.value) { setTimeout(() => { this._selectedIndexes.map(index => { listElement[index].checked = true; }); }); } } /** * @return {?} */ validate() { /** @type {?} */ const result = {}; if (this.hasRequiredError) { result['required'] = true; } return result; } /** * @param {?} index * @param {?} event * @return {?} */ toggle(index, event) { this._isTouched = true; /** @type {?} */ const checked = event.target.checked; index = +index; if (checked) { this._selectedIndexes.push(index); } else { /** @type {?} */ const indexOfIndex = this._selectedIndexes.indexOf(index); if (indexOfIndex > -1) { this._selectedIndexes.splice(indexOfIndex, 1); } } this.triggerChange(); } /** * @return {?} */ reset() { this._isTouched = false; } } FormCheckboxComponent.decorators = [ { type: Component, args: [{ selector: 'ngx-form-checkbox', template: `<label *ngIf="label" [for]="id">{{label}}</label> <div #listRadioElement> <div class="custom-control custom-checkbox" *ngFor="let option of selectOptions; let index = index;"> <input class="custom-control-input" [ngClass]="{'is-invalid': invalid, 'is-valid': valid}" type="checkbox" [id]="id + '-' + index" [name]="id" (click)="toggle(index, $event)" title=""> <label class="custom-control-label" [for]="id + '-' + index">{{option.text}}</label> </div> </div> <ng-container *ngIf="valid && validMessage"> <div class="custom-control-input is-valid"></div> <div class="valid-feedback">{{validMessage}}</div> </ng-container> <ng-container *ngIf="invalid"> <div class="custom-control-input is-invalid"></div> <div class="invalid-feedback"> <span *ngFor="let message of errorMessages; let last = last;"> {{message}}<br *ngIf="!last"> </span> </div> </ng-container> `, styles: [`:host .form-check.is-valid~.invalid-feedback,:host .form-check.is-valid~.invalid-tooltip,:host .form-check.is-valid~.valid-feedback,:host .form-check.is-valid~.valid-tooltip,:host .was-validated~.invalid-feedback,:host .was-validated~.invalid-tooltip,:host .was-validated~.valid-feedback,:host .was-validated~.valid-tooltip{display:block}`], providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: FormCheckboxComponent, multi: true }, { provide: NG_VALIDATORS, useExisting: FormCheckboxComponent, multi: true } ] },] }, ]; FormCheckboxComponent.propDecorators = { listRadioElement: [{ type: ViewChild, args: ['listRadioElement',] }] }; if (false) { /** @type {?} */ FormCheckboxComponent.prototype.listRadioElement; /** @type {?} */ FormCheckboxComponent.prototype._isTouched; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jaGVja2JveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZm9ybS1jb250cm9sLyIsInNvdXJjZXMiOlsibGliL2Zvcm0tY2hlY2tib3gvZm9ybS1jaGVja2JveC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBdUNuRixNQUFNLDRCQUE2QixTQUFRLHdCQUF3Qjs7OzBCQUk1QyxLQUFLOzs7OztJQUUxQixJQUFJLE9BQU87UUFDVCxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO0tBQ2hFOzs7O0lBRUQsSUFBSSxLQUFLO1FBQ1AsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDbkc7Ozs7SUFFRCxJQUFJLE9BQU87UUFDVCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDO1NBQ2I7UUFFRCxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDZDtRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7S0FD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Q0FBQztLQUN0Qjs7OztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztLQUN6Qjs7O1lBL0lGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsbUJBQW1CO2dCQUM3QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E0Qlg7Z0JBQ0MsTUFBTSxFQUFFLENBQUMsb1ZBQW9WLENBQUM7Z0JBQzlWLFNBQVMsRUFBRTtvQkFDVCxFQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQztvQkFDN0UsRUFBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDO2lCQUMxRTthQUNGOzs7K0JBR0UsU0FBUyxTQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBCYXNlTGlzdENvbnRyb2xDb21wb25lbnQgfSBmcm9tICcuLi8uLi91dGlscy9iYXNlLWxpc3QtY29udHJvbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZ3gtZm9ybS1jaGVja2JveCcsXHJcbiAgdGVtcGxhdGU6IGA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIFtmb3JdPVwiaWRcIj57e2xhYmVsfX08L2xhYmVsPlxyXG5cclxuPGRpdiAjbGlzdFJhZGlvRWxlbWVudD5cclxuICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wgY3VzdG9tLWNoZWNrYm94XCIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzZWxlY3RPcHRpb25zOyBsZXQgaW5kZXggPSBpbmRleDtcIj5cclxuICAgIDxpbnB1dCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWlucHV0XCJcclxuICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOiBpbnZhbGlkLCAnaXMtdmFsaWQnOiB2YWxpZH1cIlxyXG4gICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgW2lkXT1cImlkICsgJy0nICsgaW5kZXhcIlxyXG4gICAgICAgICAgIFtuYW1lXT1cImlkXCJcclxuICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlKGluZGV4LCAkZXZlbnQpXCJcclxuICAgICAgICAgICB0aXRsZT1cIlwiPlxyXG4gICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBbZm9yXT1cImlkICsgJy0nICsgaW5kZXhcIj57e29wdGlvbi50ZXh0fX08L2xhYmVsPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJ2YWxpZCAmJiB2YWxpZE1lc3NhZ2VcIj5cclxuICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXQgaXMtdmFsaWRcIj48L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwidmFsaWQtZmVlZGJhY2tcIj57e3ZhbGlkTWVzc2FnZX19PC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImludmFsaWRcIj5cclxuICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXQgaXMtaW52YWxpZFwiPjwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XHJcbiAgICA8c3BhbiAqbmdGb3I9XCJsZXQgbWVzc2FnZSBvZiBlcnJvck1lc3NhZ2VzOyBsZXQgbGFzdCA9IGxhc3Q7XCI+XHJcbiAgICAgIHt7bWVzc2FnZX19PGJyICpuZ0lmPVwiIWxhc3RcIj5cclxuICAgIDwvc3Bhbj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcbmAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IC5mb3JtLWNoZWNrLmlzLXZhbGlkfi5pbnZhbGlkLWZlZWRiYWNrLDpob3N0IC5mb3JtLWNoZWNrLmlzLXZhbGlkfi5pbnZhbGlkLXRvb2x0aXAsOmhvc3QgLmZvcm0tY2hlY2suaXMtdmFsaWR+LnZhbGlkLWZlZWRiYWNrLDpob3N0IC5mb3JtLWNoZWNrLmlzLXZhbGlkfi52YWxpZC10b29sdGlwLDpob3N0IC53YXMtdmFsaWRhdGVkfi5pbnZhbGlkLWZlZWRiYWNrLDpob3N0IC53YXMtdmFsaWRhdGVkfi5pbnZhbGlkLXRvb2x0aXAsOmhvc3QgLndhcy12YWxpZGF0ZWR+LnZhbGlkLWZlZWRiYWNrLDpob3N0IC53YXMtdmFsaWRhdGVkfi52YWxpZC10b29sdGlwe2Rpc3BsYXk6YmxvY2t9YF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBGb3JtQ2hlY2tib3hDb21wb25lbnQsIG11bHRpOiB0cnVlfSxcclxuICAgIHtwcm92aWRlOiBOR19WQUxJREFUT1JTLCB1c2VFeGlzdGluZzogRm9ybUNoZWNrYm94Q29tcG9uZW50LCBtdWx0aTogdHJ1ZX1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtQ2hlY2tib3hDb21wb25lbnQgZXh0ZW5kcyBCYXNlTGlzdENvbnRyb2xDb21wb25lbnQge1xyXG5cclxuICBAVmlld0NoaWxkKCdsaXN0UmFkaW9FbGVtZW50JykgbGlzdFJhZGlvRWxlbWVudDogRWxlbWVudFJlZjtcclxuXHJcbiAgcHJpdmF0ZSBfaXNUb3VjaGVkID0gZmFsc2U7XHJcblxyXG4gIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLl9zZWxlY3RlZEluZGV4ZXMgfHwgIXRoaXMuX3NlbGVjdGVkSW5kZXhlcy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBnZXQgdmFsdWUoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmlzRW1wdHkgPyBudWxsIDogdGhpcy5fc2VsZWN0ZWRJbmRleGVzLm1hcChpbmRleCA9PiB0aGlzLl9zZWxlY3RPcHRpb25zW2luZGV4XS52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmhhc0N1c3RvbUVycm9yKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5faXNUb3VjaGVkKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5oYXNSZXF1aXJlZEVycm9yO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuaGFzQ3VzdG9tRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5faXNUb3VjaGVkKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gIXRoaXMuaGFzUmVxdWlyZWRFcnJvcjtcclxuICB9XHJcblxyXG4gIGdldCBlcnJvck1lc3NhZ2VzKCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgaWYgKHRoaXMuaGFzQ3VzdG9tRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5uZXJDdXN0b21FcnJvck1lc3NhZ2VzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhhc1JlcXVpcmVkRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIFt0aGlzLnJlcXVpcmVkRXJyb3JNZXNzYWdlXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IEFycmF5PGFueT4pOiB2b2lkIHtcclxuICAgIGNvbnN0IGxpc3RFbGVtZW50ID0gdGhpcy5saXN0UmFkaW9FbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmN1c3RvbS1jb250cm9sLWlucHV0Jyk7XHJcblxyXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGxpc3RFbGVtZW50KSB7XHJcbiAgICAgIGVsZW1lbnQuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3NlbGVjdGVkSW5kZXhlcyA9IHRoaXMuZmluZEluZGV4ZXModmFsdWUpO1xyXG5cclxuICAgIGlmICghdGhpcy5saXN0UmFkaW9FbGVtZW50IHx8ICF0aGlzLmxpc3RSYWRpb0VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRJbmRleGVzLm1hcChpbmRleCA9PiB7XHJcbiAgICAgICAgICBsaXN0RWxlbWVudFtpbmRleF0uY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGUoKTogVmFsaWRhdGlvbkVycm9ycyB7XHJcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcbiAgICBpZiAodGhpcy5oYXNSZXF1aXJlZEVycm9yKSB7XHJcbiAgICAgIHJlc3VsdFsncmVxdWlyZWQnXSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vIG5vaW5zcGVjdGlvbiBKU01ldGhvZENhbkJlU3RhdGljXHJcbiAgdG9nZ2xlKGluZGV4LCBldmVudCkge1xyXG4gICAgdGhpcy5faXNUb3VjaGVkID0gdHJ1ZTtcclxuICAgIGNvbnN0IGNoZWNrZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZDtcclxuXHJcbiAgICBpbmRleCA9ICtpbmRleDtcclxuXHJcbiAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZEluZGV4ZXMucHVzaChpbmRleCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpbmRleE9mSW5kZXggPSB0aGlzLl9zZWxlY3RlZEluZGV4ZXMuaW5kZXhPZihpbmRleCk7XHJcblxyXG4gICAgICBpZiAoaW5kZXhPZkluZGV4ID4gLTEpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZEluZGV4ZXMuc3BsaWNlKGluZGV4T2ZJbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRyaWdnZXJDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5faXNUb3VjaGVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=