UNPKG

ngx-form-control

Version:
194 lines (193 loc) 17.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ElementRef, ViewChild } from '@angular/core'; import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms'; import { BaseListControlComponent } from '../../utils/base-list-control.component'; var FormRadioComponent = /** @class */ (function (_super) { tslib_1.__extends(FormRadioComponent, _super); function FormRadioComponent() { var _this = _super !== null && _super.apply(this, arguments) || this; _this._isTouched = false; return _this; } Object.defineProperty(FormRadioComponent.prototype, "isEmpty", { get: /** * @return {?} */ function () { return !this._selectedIndexes || !this._selectedIndexes.length; }, enumerable: true, configurable: true }); Object.defineProperty(FormRadioComponent.prototype, "value", { get: /** * @return {?} */ function () { return this.isEmpty ? null : this._selectOptions[this._selectedIndexes[0]].value; }, enumerable: true, configurable: true }); Object.defineProperty(FormRadioComponent.prototype, "invalid", { get: /** * @return {?} */ function () { if (this.hasCustomError) { return true; } if (!this._isTouched) { return false; } return this.hasRequiredError; }, enumerable: true, configurable: true }); Object.defineProperty(FormRadioComponent.prototype, "valid", { get: /** * @return {?} */ function () { if (this.hasCustomError) { return false; } if (!this._isTouched) { return false; } return !this.hasRequiredError; }, enumerable: true, configurable: true }); Object.defineProperty(FormRadioComponent.prototype, "errorMessages", { get: /** * @return {?} */ function () { if (this.hasRequiredError) { return [this.requiredErrorMessage]; } if (this.hasCustomError) { return this.innerCustomErrorMessages; } }, enumerable: true, configurable: true }); /** * @param {?} value * @return {?} */ FormRadioComponent.prototype.writeValue = /** * @param {?} value * @return {?} */ function (value) { var _this = this; /** @type {?} */ var listElement = this.listRadioElement.nativeElement.querySelectorAll('.custom-control-input'); try { for (var listElement_1 = tslib_1.__values(listElement), listElement_1_1 = listElement_1.next(); !listElement_1_1.done; listElement_1_1 = listElement_1.next()) { var element = listElement_1_1.value; element.checked = false; } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (listElement_1_1 && !listElement_1_1.done && (_a = listElement_1.return)) _a.call(listElement_1); } finally { if (e_1) throw e_1.error; } } if (!value) { return; } this._selectedIndexes = this.findIndexes([value]); if (!this.listRadioElement || !this.listRadioElement.nativeElement) { return; } if (this.value) { setTimeout(function () { /** @type {?} */ var index = _this._selectedIndexes[0]; listElement[index].checked = true; }); } var e_1, _a; }; /** * @return {?} */ FormRadioComponent.prototype.validate = /** * @return {?} */ function () { /** @type {?} */ var result = {}; if (this.hasRequiredError) { result['required'] = true; } return result; }; // noinspection JSMethodCanBeStatic /** * @param {?} index * @param {?} event * @return {?} */ FormRadioComponent.prototype.toggle = /** * @param {?} index * @param {?} event * @return {?} */ function (index, event) { this._isTouched = true; index = +index; if (this.required || index !== this._selectedIndexes[0]) { this._selectedIndexes = [+index]; } else { this._selectedIndexes = []; event.target.checked = false; } this.triggerChange(); }; /** * @return {?} */ FormRadioComponent.prototype.reset = /** * @return {?} */ function () { this._isTouched = false; }; FormRadioComponent.decorators = [ { type: Component, args: [{ selector: 'ngx-form-radio', template: "<label *ngIf=\"label\" [for]=\"id\">{{label}}</label>\n\n<div #listRadioElement>\n <div class=\"custom-control custom-radio\" *ngFor=\"let option of selectOptions; let index = index;\">\n <input class=\"custom-control-input\"\n [ngClass]=\"{'is-invalid': invalid, 'is-valid': valid}\"\n type=\"radio\"\n [id]=\"id + '-' + index\"\n [name]=\"id\"\n (click)=\"toggle(index, $event)\"\n title=\"\">\n <label class=\"custom-control-label\" [for]=\"id + '-' + index\">{{option.text}}</label>\n </div>\n</div>\n\n<ng-container *ngIf=\"valid && validMessage\">\n <div class=\"custom-control-input is-valid\"></div>\n <div class=\"valid-feedback\">{{validMessage}}</div>\n</ng-container>\n\n<ng-container *ngIf=\"invalid\">\n <div class=\"custom-control-input is-invalid\"></div>\n <div class=\"invalid-feedback\">\n <span *ngFor=\"let message of errorMessages; let last = last;\">\n {{message}}<br *ngIf=\"!last\">\n </span>\n </div>\n</ng-container>\n", 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: FormRadioComponent, multi: true }, { provide: NG_VALIDATORS, useExisting: FormRadioComponent, multi: true } ] },] }, ]; FormRadioComponent.propDecorators = { listRadioElement: [{ type: ViewChild, args: ['listRadioElement',] }] }; return FormRadioComponent; }(BaseListControlComponent)); export { FormRadioComponent }; if (false) { /** @type {?} */ FormRadioComponent.prototype.listRadioElement; /** @type {?} */ FormRadioComponent.prototype._isTouched; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1yYWRpby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZm9ybS1jb250cm9sLyIsInNvdXJjZXMiOlsibGliL2Zvcm0tcmFkaW8vZm9ybS1yYWRpby5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFDLGFBQWEsRUFBRSxpQkFBaUIsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRixPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQzs7SUF1Q3pDLDhDQUF3Qjs7OzJCQUl6QyxLQUFLOzs7SUFFMUIsc0JBQUksdUNBQU87Ozs7UUFBWDtZQUNFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7U0FDaEU7OztPQUFBO0lBRUQsc0JBQUkscUNBQUs7Ozs7UUFBVDtZQUNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ2xGOzs7T0FBQTtJQUVELHNCQUFJLHVDQUFPOzs7O1FBQVg7WUFDRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztnQkFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQzthQUNiO1lBRUQsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDckIsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUNkO1lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztTQUM5Qjs7O09BQUE7SUFFRCxz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S0FDdEI7Ozs7SUFFRCxrQ0FBSzs7O0lBQUw7UUFDRSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztLQUN6Qjs7Z0JBeklGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUUsdWdDQTRCWDtvQkFDQyxNQUFNLEVBQUUsQ0FBQyxvVkFBb1YsQ0FBQztvQkFDOVYsU0FBUyxFQUFFO3dCQUNULEVBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDO3dCQUMxRSxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUM7cUJBQ3ZFO2lCQUNGOzs7bUNBR0UsU0FBUyxTQUFDLGtCQUFrQjs7NkJBM0MvQjtFQXlDd0Msd0JBQXdCO1NBQW5ELGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0aW9uRXJyb3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7QmFzZUxpc3RDb250cm9sQ29tcG9uZW50fSBmcm9tICcuLi8uLi91dGlscy9iYXNlLWxpc3QtY29udHJvbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZ3gtZm9ybS1yYWRpbycsXHJcbiAgdGVtcGxhdGU6IGA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIFtmb3JdPVwiaWRcIj57e2xhYmVsfX08L2xhYmVsPlxyXG5cclxuPGRpdiAjbGlzdFJhZGlvRWxlbWVudD5cclxuICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wgY3VzdG9tLXJhZGlvXCIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzZWxlY3RPcHRpb25zOyBsZXQgaW5kZXggPSBpbmRleDtcIj5cclxuICAgIDxpbnB1dCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWlucHV0XCJcclxuICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOiBpbnZhbGlkLCAnaXMtdmFsaWQnOiB2YWxpZH1cIlxyXG4gICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXHJcbiAgICAgICAgICAgW2lkXT1cImlkICsgJy0nICsgaW5kZXhcIlxyXG4gICAgICAgICAgIFtuYW1lXT1cImlkXCJcclxuICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlKGluZGV4LCAkZXZlbnQpXCJcclxuICAgICAgICAgICB0aXRsZT1cIlwiPlxyXG4gICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBbZm9yXT1cImlkICsgJy0nICsgaW5kZXhcIj57e29wdGlvbi50ZXh0fX08L2xhYmVsPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJ2YWxpZCAmJiB2YWxpZE1lc3NhZ2VcIj5cclxuICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXQgaXMtdmFsaWRcIj48L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwidmFsaWQtZmVlZGJhY2tcIj57e3ZhbGlkTWVzc2FnZX19PC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImludmFsaWRcIj5cclxuICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXQgaXMtaW52YWxpZFwiPjwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XHJcbiAgICA8c3BhbiAqbmdGb3I9XCJsZXQgbWVzc2FnZSBvZiBlcnJvck1lc3NhZ2VzOyBsZXQgbGFzdCA9IGxhc3Q7XCI+XHJcbiAgICAgIHt7bWVzc2FnZX19PGJyICpuZ0lmPVwiIWxhc3RcIj5cclxuICAgIDwvc3Bhbj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcbmAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IC5mb3JtLWNoZWNrLmlzLXZhbGlkfi5pbnZhbGlkLWZlZWRiYWNrLDpob3N0IC5mb3JtLWNoZWNrLmlzLXZhbGlkfi5pbnZhbGlkLXRvb2x0aXAsOmhvc3QgLmZvcm0tY2hlY2suaXMtdmFsaWR+LnZhbGlkLWZlZWRiYWNrLDpob3N0IC5mb3JtLWNoZWNrLmlzLXZhbGlkfi52YWxpZC10b29sdGlwLDpob3N0IC53YXMtdmFsaWRhdGVkfi5pbnZhbGlkLWZlZWRiYWNrLDpob3N0IC53YXMtdmFsaWRhdGVkfi5pbnZhbGlkLXRvb2x0aXAsOmhvc3QgLndhcy12YWxpZGF0ZWR+LnZhbGlkLWZlZWRiYWNrLDpob3N0IC53YXMtdmFsaWRhdGVkfi52YWxpZC10b29sdGlwe2Rpc3BsYXk6YmxvY2t9YF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBGb3JtUmFkaW9Db21wb25lbnQsIG11bHRpOiB0cnVlfSxcclxuICAgIHtwcm92aWRlOiBOR19WQUxJREFUT1JTLCB1c2VFeGlzdGluZzogRm9ybVJhZGlvQ29tcG9uZW50LCBtdWx0aTogdHJ1ZX1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtUmFkaW9Db21wb25lbnQgZXh0ZW5kcyBCYXNlTGlzdENvbnRyb2xDb21wb25lbnQge1xyXG5cclxuICBAVmlld0NoaWxkKCdsaXN0UmFkaW9FbGVtZW50JykgbGlzdFJhZGlvRWxlbWVudDogRWxlbWVudFJlZjtcclxuXHJcbiAgcHJpdmF0ZSBfaXNUb3VjaGVkID0gZmFsc2U7XHJcblxyXG4gIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLl9zZWxlY3RlZEluZGV4ZXMgfHwgIXRoaXMuX3NlbGVjdGVkSW5kZXhlcy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBnZXQgdmFsdWUoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmlzRW1wdHkgPyBudWxsIDogdGhpcy5fc2VsZWN0T3B0aW9uc1t0aGlzLl9zZWxlY3RlZEluZGV4ZXNbMF1dLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGludmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5oYXNDdXN0b21FcnJvcikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX2lzVG91Y2hlZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaGFzUmVxdWlyZWRFcnJvcjtcclxuICB9XHJcblxyXG4gIGdldCB2YWxpZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmhhc0N1c3RvbUVycm9yKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX2lzVG91Y2hlZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICF0aGlzLmhhc1JlcXVpcmVkRXJyb3I7XHJcbiAgfVxyXG5cclxuICBnZXQgZXJyb3JNZXNzYWdlcygpOiBBcnJheTxzdHJpbmc+IHtcclxuICAgIGlmICh0aGlzLmhhc1JlcXVpcmVkRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIFt0aGlzLnJlcXVpcmVkRXJyb3JNZXNzYWdlXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5oYXNDdXN0b21FcnJvcikge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbm5lckN1c3RvbUVycm9yTWVzc2FnZXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxpc3RFbGVtZW50ID0gdGhpcy5saXN0UmFkaW9FbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmN1c3RvbS1jb250cm9sLWlucHV0Jyk7XHJcblxyXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGxpc3RFbGVtZW50KSB7XHJcbiAgICAgIGVsZW1lbnQuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3NlbGVjdGVkSW5kZXhlcyA9IHRoaXMuZmluZEluZGV4ZXMoW3ZhbHVlXSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmxpc3RSYWRpb0VsZW1lbnQgfHwgIXRoaXMubGlzdFJhZGlvRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy52YWx1ZSkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3NlbGVjdGVkSW5kZXhlc1swXTtcclxuICAgICAgICBsaXN0RWxlbWVudFtpbmRleF0uY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGUoKTogVmFsaWRhdGlvbkVycm9ycyB7XHJcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcbiAgICBpZiAodGhpcy5oYXNSZXF1aXJlZEVycm9yKSB7XHJcbiAgICAgIHJlc3VsdFsncmVxdWlyZWQnXSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vIG5vaW5zcGVjdGlvbiBKU01ldGhvZENhbkJlU3RhdGljXHJcbiAgdG9nZ2xlKGluZGV4LCBldmVudCkge1xyXG4gICAgdGhpcy5faXNUb3VjaGVkID0gdHJ1ZTtcclxuICAgIGluZGV4ID0gK2luZGV4O1xyXG5cclxuICAgIGlmICh0aGlzLnJlcXVpcmVkIHx8IGluZGV4ICE9PSB0aGlzLl9zZWxlY3RlZEluZGV4ZXNbMF0pIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRJbmRleGVzID0gWytpbmRleF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZEluZGV4ZXMgPSBbXTtcclxuICAgICAgZXZlbnQudGFyZ2V0LmNoZWNrZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRyaWdnZXJDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5faXNUb3VjaGVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=