UNPKG

@asi-ngtools/lib

Version:

This project is a little components library, simple to use, which will help you to simplify your project.

235 lines (234 loc) 20.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { DefaultControlValueAccessor } from './../common/default-control-value-accessor'; import { AsiRadioButtonComponent } from './asi-radio-button/asi-radio-button.component'; import { Input, Component, TemplateRef, ViewChild, ContentChildren, QueryList, forwardRef, ElementRef, Renderer2 } from '@angular/core'; import * as nh from '../../native-helper'; export class AsiRadioButtonGroupComponent extends DefaultControlValueAccessor { /** * @param {?} renderer * @param {?} elementRef */ constructor(renderer, elementRef) { super(); this.renderer = renderer; this.elementRef = elementRef; /** * Label position */ this.labelPosition = 'top'; /** * Vertical / Horizontal */ this.vertical = false; /** * Allow you to select multiple value */ this.multiple = false; /** * Track data base on a sub attribute rather than reference */ this.trackBy = null; this.radios = new Array(); } /** * @return {?} */ ngOnInit() { this.renderer.addClass(this.elementRef.nativeElement, 'label-' + this.labelPosition); if (this.vertical) { this.renderer.addClass(this.elementRef.nativeElement, 'asi-vertical'); } } /** * @return {?} */ getRadios() { return this.radios; } /** * @param {?} radioEvent * @return {?} */ onRadioChecked(radioEvent) { /** @type {?} */ const radio = this.getRadioForIndex(radioEvent.index); if (radioEvent.value) { if (this.multiple) { if (this.value == null) { this._value = []; } this._value.push(radio.value); } else { this._value = radio.value; } } else { if (this.multiple) { nh.remove(this._value, (value) => { if (this.trackBy != null) { return radio.value[this.trackBy] === value[this.trackBy]; } else { return radio.value === value; } }); } else { this._value = null; } } // fire model change this.value = this._value; this.initRadioButton(this.value); } /** * @param {?} index * @return {?} */ getRadioForIndex(index) { return nh.find(this.radios, (radio) => { return radio.index === index; }); } /** * @return {?} */ ngAfterContentInit() { /** @type {?} */ let index = -1; this.queryRadios.forEach(radio => { radio.index = ++index; this.radios.push(radio); }); this.queryRadios.changes.subscribe((items) => { this.radios = []; index = -1; items.forEach(radio => { radio.index = ++index; this.radios.push(radio); }); }); this.initRadioButton(this.value); } /** * @param {?} value * @return {?} */ writeValue(value) { if (this.multiple && !nh.isArray(value) && value != null) { value = [value]; } this._value = value; this.initRadioButton(value); } /** * @param {?} value * @return {?} */ initRadioButton(value) { if (nh.isEmpty(value)) { this.radios.forEach((radio) => { radio.active = false; }); } else { if (nh.isArray(value)) { this.radios.forEach((radio) => { if (this.trackBy != null) { radio.active = nh.find(this.value, (val) => { return radio.value[this.trackBy] === val[this.trackBy]; }) != null; } else { radio.active = nh.find(this.value, (val) => { return radio.value === val; }) != null; } }); } else { if (this.trackBy != null) { this.radios.forEach((radio) => { radio.active = radio.value[this.trackBy] === value[this.trackBy]; }); } else { this.radios.forEach((radio) => { radio.active = (radio.value === value); }); } } } } } AsiRadioButtonGroupComponent.decorators = [ { type: Component, args: [{ selector: 'asi-radio-button-group', template: "<label class=\"input-label\" *ngIf=\"label != null\">{{label | translate}}</label>\n<div class=\"asi-radio-button-container\">\n <asi-radio-button-element *ngFor=\"let radio of getRadios()\"\n [radio]=\"radio\"\n [disabled]=\"disabled\"\n [value]=\"radio.active\"\n (onValueChange)=\"onRadioChecked($event)\">\n </asi-radio-button-element>\n</div>\n", host: { 'class': 'asi-component asi-radio-button-group' }, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => AsiRadioButtonGroupComponent), multi: true } ] }] } ]; /** @nocollapse */ AsiRadioButtonGroupComponent.ctorParameters = () => [ { type: Renderer2 }, { type: ElementRef } ]; AsiRadioButtonGroupComponent.propDecorators = { label: [{ type: Input }], labelPosition: [{ type: Input }], vertical: [{ type: Input }], multiple: [{ type: Input }], trackBy: [{ type: Input }], queryRadios: [{ type: ContentChildren, args: [AsiRadioButtonComponent,] }], contentTemplate: [{ type: ViewChild, args: [TemplateRef,] }] }; if (false) { /** * Label to display (is translated) * @type {?} */ AsiRadioButtonGroupComponent.prototype.label; /** * Label position * @type {?} */ AsiRadioButtonGroupComponent.prototype.labelPosition; /** * Vertical / Horizontal * @type {?} */ AsiRadioButtonGroupComponent.prototype.vertical; /** * Allow you to select multiple value * @type {?} */ AsiRadioButtonGroupComponent.prototype.multiple; /** * Track data base on a sub attribute rather than reference * @type {?} */ AsiRadioButtonGroupComponent.prototype.trackBy; /** @type {?} */ AsiRadioButtonGroupComponent.prototype.queryRadios; /** @type {?} */ AsiRadioButtonGroupComponent.prototype.contentTemplate; /** @type {?} */ AsiRadioButtonGroupComponent.prototype.radios; /** @type {?} */ AsiRadioButtonGroupComponent.prototype.renderer; /** @type {?} */ AsiRadioButtonGroupComponent.prototype.elementRef; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLXJhZGlvLWJ1dHRvbi1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYXNpLW5ndG9vbHMvbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYXNpLXJhZGlvLWJ1dHRvbi1ncm91cC9hc2ktcmFkaW8tYnV0dG9uLWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDekYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUNMLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUNwRSxVQUFVLEVBQTRCLFVBQVUsRUFBRSxTQUFTLEVBQzVELE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFjekMsTUFBTSxtQ0FBb0MsU0FBUSwyQkFBMkI7Ozs7O0lBc0IzRSxZQUFvQixRQUFtQixFQUM3QjtRQUNSLEtBQUssRUFBRSxDQUFDO1FBRlUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUM3QixlQUFVLEdBQVYsVUFBVTs7Ozs2QkFsQjJFLEtBQUs7Ozs7d0JBR2hGLEtBQUs7Ozs7d0JBR0wsS0FBSzs7Ozt1QkFHRSxJQUFJO3NCQU10QixJQUFJLEtBQUssRUFBMkI7S0FLNUM7Ozs7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyRixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNsQixJQUFJLENBQUMs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QTRCLENBQUM7d0JBQzNELEtBQUssRUFBRSxJQUFJO3FCQUNaO2lCQUNGO2FBQ0Y7Ozs7WUFoQm1ELFNBQVM7WUFBckIsVUFBVTs7O29CQW9CL0MsS0FBSzs0QkFFTCxLQUFLO3VCQUdMLEtBQUs7dUJBR0wsS0FBSztzQkFHTCxLQUFLOzBCQUVMLGVBQWUsU0FBQyx1QkFBdUI7OEJBRXZDLFNBQVMsU0FBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERlZmF1bHRDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJy4vLi4vY29tbW9uL2RlZmF1bHQtY29udHJvbC12YWx1ZS1hY2Nlc3Nvcic7XHJcbmltcG9ydCB7IEFzaVJhZGlvQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9hc2ktcmFkaW8tYnV0dG9uL2FzaS1yYWRpby1idXR0b24uY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBJbnB1dCwgQ29tcG9uZW50LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBDb250ZW50Q2hpbGRyZW4sIFF1ZXJ5TGlzdCxcclxuICBmb3J3YXJkUmVmLCBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEVsZW1lbnRSZWYsIFJlbmRlcmVyMlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0ICogYXMgbmggZnJvbSAnLi4vLi4vbmF0aXZlLWhlbHBlcidcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXNpLXJhZGlvLWJ1dHRvbi1ncm91cCcsXHJcbiAgdGVtcGxhdGVVcmw6ICdhc2ktcmFkaW8tYnV0dG9uLWdyb3VwLmNvbXBvbmVudC5odG1sJyxcclxuICBob3N0OiB7ICdjbGFzcyc6ICdhc2ktY29tcG9uZW50IGFzaS1yYWRpby1idXR0b24tZ3JvdXAnIH0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBc2lSYWRpb0J1dHRvbkdyb3VwQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBc2lSYWRpb0J1dHRvbkdyb3VwQ29tcG9uZW50IGV4dGVuZHMgRGVmYXVsdENvbnRyb2xWYWx1ZUFjY2Vzc29yIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0IHtcclxuXHJcbiAgLyoqIExhYmVsIHRvIGRpc3BsYXkgKGlzIHRyYW5zbGF0ZWQpICovXHJcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcclxuICAvKiogTGFiZWwgcG9zaXRpb24gKi9cclxuICBASW5wdXQoKSBsYWJlbFBvc2l0aW9uOiAndG9wJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAnYm90dG9tJyB8ICdib3R0b20tY2VudGVyJyB8ICd0b3AtY2VudGVyJyA9ICd0b3AnO1xyXG5cclxuICAvKiogVmVydGljYWwgLyBIb3Jpem9udGFsICovXHJcbiAgQElucHV0KCkgdmVydGljYWwgPSBmYWxzZTtcclxuXHJcbiAgLyoqIEFsbG93IHlvdSB0byBzZWxlY3QgbXVsdGlwbGUgdmFsdWUgKi9cclxuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xyXG5cclxuICAvKiogVHJhY2sgZGF0YSBiYXNlIG9uIGEgc3ViIGF0dHJpYnV0ZSByYXRoZXIgdGhhbiByZWZlcmVuY2UgICovXHJcbiAgQElucHV0KCkgdHJhY2tCeTogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihBc2lSYWRpb0J1dHRvbkNvbXBvbmVudCkgcXVlcnlSYWRpb3M6IFF1ZXJ5TGlzdDxBc2lSYWRpb0J1dHRvbkNvbXBvbmVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGQoVGVtcGxhdGVSZWYpIGNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgcmFkaW9zID0gbmV3IEFycmF5PEFzaVJhZGlvQnV0dG9uQ29tcG9uZW50PigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdsYWJlbC0nICsgdGhpcy5sYWJlbFBvc2l0aW9uKTtcclxuICAgIGlmICh0aGlzLnZlcnRpY2FsKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdhc2ktdmVydGljYWwnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJhZGlvcygpIHtcclxuICAgIHJldHVybiB0aGlzLnJhZGlvcztcclxuICB9XHJcblxyXG4gIG9uUmFkaW9DaGVja2VkKHJhZGlvRXZlbnQ6IHsgaW5kZXg6IG51bWJlciwgdmFsdWU6IGJvb2xlYW4gfSkge1xyXG4gICAgY29uc3QgcmFkaW8gPSB0aGlzLmdldFJhZGlvRm9ySW5kZXgocmFkaW9FdmVudC5pbmRleCk7XHJcbiAgICBpZiAocmFkaW9FdmVudC52YWx1ZSkge1xyXG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuX3ZhbHVlID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3ZhbHVlLnB1c2gocmFkaW8udmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gcmFkaW8udmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgbmgucmVtb3ZlKHRoaXMuX3ZhbHVlLCAodmFsdWUpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLnRyYWNrQnkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmFkaW8udmFsdWVbdGhpcy50cmFja0J5XSA9PT0gdmFsdWVbdGhpcy50cmFja0J5XTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiByYWRpby52YWx1ZSA9PT0gdmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmlyZSBtb2RlbCBjaGFuZ2VcclxuICAgIHRoaXMudmFsdWUgPSB0aGlzLl92YWx1ZTtcclxuICAgIHRoaXMuaW5pdFJhZGlvQnV0dG9uKHRoaXMudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSYWRpb0ZvckluZGV4KGluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiBuaC5maW5kKHRoaXMucmFkaW9zLCAocmFkaW8pID0+IHtcclxuICAgICAgcmV0dXJuIHJhZGlvLmluZGV4ID09PSBpbmRleDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgbGV0IGluZGV4ID0gLTE7XHJcbiAgICB0aGlzLnF1ZXJ5UmFkaW9zLmZvckVhY2gocmFkaW8gPT4ge1xyXG4gICAgICByYWRpby5pbmRleCA9ICsraW5kZXg7XHJcbiAgICAgIHRoaXMucmFkaW9zLnB1c2gocmFkaW8pXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnF1ZXJ5UmFkaW9zLmNoYW5nZXMuc3Vic2NyaWJlKChpdGVtcykgPT4ge1xyXG4gICAgICB0aGlzLnJhZGlvcyA9IFtdO1xyXG4gICAgICBpbmRleCA9IC0xO1xyXG4gICAgICBpdGVtcy5mb3JFYWNoKHJhZGlvID0+IHtcclxuICAgICAgICByYWRpby5pbmRleCA9ICsraW5kZXg7XHJcbiAgICAgICAgdGhpcy5yYWRpb3MucHVzaChyYWRpbylcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmluaXRSYWRpb0J1dHRvbih0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgIW5oLmlzQXJyYXkodmFsdWUpICYmIHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgdmFsdWUgPSBbdmFsdWVdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuaW5pdFJhZGlvQnV0dG9uKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdFJhZGlvQnV0dG9uKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmIChuaC5pc0VtcHR5KHZhbHVlKSkge1xyXG4gICAgICB0aGlzLnJhZGlvcy5mb3JFYWNoKChyYWRpbykgPT4ge1xyXG4gICAgICAgIHJhZGlvLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChuaC5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIHRoaXMucmFkaW9zLmZvckVhY2goKHJhZGlvKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy50cmFja0J5ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmFkaW8uYWN0aXZlID0gbmguZmluZCh0aGlzLnZhbHVlLCAodmFsKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJhZGlvLnZhbHVlW3RoaXMudHJhY2tCeV0gPT09IHZhbFt0aGlzLnRyYWNrQnldO1xyXG4gICAgICAgICAgICB9KSAhPSBudWxsO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmFkaW8uYWN0aXZlID0gbmguZmluZCh0aGlzLnZhbHVlLCAodmFsKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJhZGlvLnZhbHVlID09PSB2YWw7XHJcbiAgICAgICAgICAgIH0pICE9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJhY2tCeSAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLnJhZGlvcy5mb3JFYWNoKChyYWRpbykgPT4ge1xyXG4gICAgICAgICAgICByYWRpby5hY3RpdmUgPSByYWRpby52YWx1ZVt0aGlzLnRyYWNrQnldID09PSB2YWx1ZVt0aGlzLnRyYWNrQnldO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmFkaW9zLmZvckVhY2goKHJhZGlvKSA9PiB7XHJcbiAgICAgICAgICAgIHJhZGlvLmFjdGl2ZSA9IChyYWRpby52YWx1ZSA9PT0gdmFsdWUpXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19