@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
JavaScript
/**
* @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