@junte/ui
Version:
Quality Angular UI components kit
126 lines • 16.7 kB
JavaScript
var CheckboxGroupComponent_1;
import { __decorate, __metadata } from "tslib";
import { Component, ContentChildren, forwardRef, HostBinding, HostListener, Input, QueryList } from '@angular/core';
import { ControlValueAccessor, FormBuilder, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
import { NGXLogger } from 'ngx-logger';
import { distinctUntilChanged, map } from 'rxjs/operators';
import { PropertyApi } from '../../../core/decorators/api';
import { Size } from '../../../core/enums/size';
import { UI } from '../../../core/enums/ui';
import { isEqual } from '../../../core/utils/equal';
import { CheckboxComponent } from '../checkbox.component';
let CheckboxGroupComponent = CheckboxGroupComponent_1 = class CheckboxGroupComponent {
constructor(fb, logger) {
this.fb = fb;
this.logger = logger;
this.ui = UI;
this.host = 'jnt-checkbox-group-host';
this._size = Size.normal;
this.selectedItems = [];
this.checkboxesControl = this.fb.array([]);
this.form = this.fb.group({
checkboxes: this.checkboxesControl
});
this.cols = 1;
this.onChange = () => this.logger.error('value accessor is not registered');
this.onTouched = () => this.logger.error('value accessor is not registered');
this.registerOnChange = fn => this.onChange = fn;
this.registerOnTouched = fn => this.onTouched = fn;
this.onBlur = () => this.onTouched();
}
set size(size) {
this._size = size || Size.normal;
}
get size() {
return this._size;
}
ngAfterViewInit() {
this.update();
this.checkboxes.changes.subscribe(() => this.update());
this.checkboxesControl.valueChanges.pipe(map(checkboxes => this.checkboxes
.filter((_, i) => checkboxes[i])
.map(checkbox => checkbox.value)), distinctUntilChanged((a, b) => isEqual(a, b))).subscribe(selectedItems => {
this.selectedItems = selectedItems;
this.onChange(selectedItems);
});
}
update() {
if (!!this.checkboxes) {
this.checkboxesControl.reset([], { emitEvent: false });
this.checkboxes.forEach((checkbox, i) => {
const control = this.checkboxesControl.get(i.toString());
if (!!control) {
control.setValue(this.selectedItems.includes(checkbox.value), { emitEvent: false });
}
else {
this.checkboxesControl.push(new FormControl(this.selectedItems.includes(checkbox.value)));
}
});
}
}
writeValue(value) {
let selectedItems = [];
if (!!value) {
selectedItems = Array.isArray(value) ? value : [value];
}
this.selectedItems = selectedItems;
this.update();
}
setDisabledState(isDisabled) {
isDisabled ? this.checkboxesControl.disable({ emitEvent: false })
: this.checkboxesControl.enable({ emitEvent: false });
}
};
CheckboxGroupComponent.ctorParameters = () => [
{ type: FormBuilder },
{ type: NGXLogger }
];
__decorate([
HostBinding('attr.host'),
__metadata("design:type", Object)
], CheckboxGroupComponent.prototype, "host", void 0);
__decorate([
PropertyApi({
description: 'Count of cols in checkbox group',
type: 'number',
default: 1
}),
Input(),
__metadata("design:type", Object)
], CheckboxGroupComponent.prototype, "cols", void 0);
__decorate([
PropertyApi({
description: 'Size for checkbox in checkbox group',
path: 'ui.size',
options: [Size.tiny, Size.small, Size.normal, Size.large],
default: Size.normal
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], CheckboxGroupComponent.prototype, "size", null);
__decorate([
ContentChildren(CheckboxComponent),
__metadata("design:type", QueryList)
], CheckboxGroupComponent.prototype, "checkboxes", void 0);
__decorate([
HostListener('blur'),
__metadata("design:type", Object)
], CheckboxGroupComponent.prototype, "onBlur", void 0);
CheckboxGroupComponent = CheckboxGroupComponent_1 = __decorate([
Component({
selector: 'jnt-checkbox-group',
template: "<form child-of=\"jnt-checkbox-group-host\" [formGroup]=\"form\">\n <ng-container formArrayName=\"checkboxes\">\n <ng-container *ngIf=\"!!checkboxesControl.length\">\n <ng-container *ngIf=\"cols <= 1; else colTemplate\">\n <jnt-stack child-of=\"jnt-checkbox-group-host\" [gutter]=\"ui.gutter.small\" [align]=\"ui.align.stretch\">\n <jnt-checkbox child-of=\"jnt-checkbox-group-host\" *ngFor=\"let item of checkboxes; let i = index\"\n [formControlName]=\"i\"\n [size]=\"size\"\n [label]=\"item.label\"\n [value]=\"item.value\">\n <ng-template *ngIf=\"!!item.labelTemplate\" #checkboxLabelTemplate>\n <ng-container *ngTemplateOutlet=\"item.labelTemplate\"></ng-container>\n </ng-template>\n </jnt-checkbox>\n </jnt-stack>\n </ng-container>\n <ng-template #colTemplate>\n <jnt-row child-of=\"jnt-checkbox-group-host\" >\n <jnt-col child-of=\"jnt-checkbox-group-host\" *ngFor=\"let item of checkboxes; let i = index\" [tablet]=\"(12 / cols) | trunc\">\n <jnt-checkbox child-of=\"jnt-checkbox-group-host\" [formControlName]=\"i\"\n [size]=\"size\"\n [label]=\"item.label\"\n [value]=\"item.value\">\n <ng-template *ngIf=\"!!item.labelTemplate\" #checkboxLabelTemplate>\n <ng-container *ngTemplateOutlet=\"item.labelTemplate\"></ng-container>\n </ng-template>\n </jnt-checkbox>\n </jnt-col>\n </jnt-row>\n </ng-template>\n </ng-container>\n </ng-container>\n</form>",
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => CheckboxGroupComponent_1),
multi: true
}
]
}),
__metadata("design:paramtypes", [FormBuilder,
NGXLogger])
], CheckboxGroupComponent);
export { CheckboxGroupComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gtZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGp1bnRlL3VpLyIsInNvdXJjZXMiOlsibGliL2Zvcm1zL2NoZWNrYm94L2NoZWNrYm94LWdyb3VwL2NoZWNrYm94LWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFDTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFjMUQsSUFBYSxzQkFBc0IsOEJBQW5DLE1BQWEsc0JBQXNCO0lBK0NqQyxZQUFvQixFQUFlLEVBQ2YsTUFBaUI7UUFEakIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLFdBQU0sR0FBTixNQUFNLENBQVc7UUE5Q3JDLE9BQUUsR0FBRyxFQUFFLENBQUM7UUFHQyxTQUFJLEdBQUcseUJBQXlCLENBQUM7UUFFbEMsVUFBSyxHQUFTLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUIsa0JBQWEsR0FBRyxFQUFF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QUFJLENBQUMsS0FBSyxDQUFDO1FBQ3pELE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTTtLQUNyQixDQUFDO0lBQ0QsS0FBSyxFQUFFOzs7a0RBR1A7QUFPRDtJQURDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQzs4QkFDdkIsU0FBUzswREFBb0I7QUFNbkI7SUFBckIsWUFBWSxDQUFDLE1BQU0sQ0FBQzs7c0RBQWlDO0FBN0MzQyxzQkFBc0I7SUFabEMsU0FBUyxDQUFDO1FBQ1QsUUFBUSxFQUFFLG9CQUFvQjtRQUM5QiwrckRBQWlEO1FBQ2pELFNBQVMsRUFBRTtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXNCLENBQUM7Z0JBQ3JELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRjtLQUNGLENBQUM7cUNBaUR3QixXQUFXO1FBQ1AsU0FBUztHQWhEMUIsc0JBQXNCLENBNkZsQztTQTdGWSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIFF1ZXJ5TGlzdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTkdYTG9nZ2VyIH0gZnJvbSAnbmd4LWxvZ2dlcic7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUHJvcGVydHlBcGkgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2RlY29yYXRvcnMvYXBpJztcbmltcG9ydCB7IFNpemUgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW1zL3NpemUnO1xuaW1wb3J0IHsgVUkgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW1zL3VpJztcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL2VxdWFsJztcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vY2hlY2tib3guY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnam50LWNoZWNrYm94LWdyb3VwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrYm94LWdyb3VwLmVuY2Fwc3VsYXRlZC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDaGVja2JveEdyb3VwQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuXG5leHBvcnQgY2xhc3MgQ2hlY2tib3hHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0IHtcblxuICB1aSA9IFVJO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5ob3N0JylcbiAgcmVhZG9ubHkgaG9zdCA9ICdqbnQtY2hlY2tib3gtZ3JvdXAtaG9zdCc7XG5cbiAgcHJpdmF0ZSBfc2l6ZTogU2l6ZSA9IFNpemUubm9ybWFsO1xuICBwcml2YXRlIHNlbGVjdGVkSXRlbXMgPSBbXTtcblxuICBjaGVja2JveGVzQ29udHJvbCA9IHRoaXMuZmIuYXJyYXkoW10pO1xuICBmb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgY2hlY2tib3hlczogdGhpcy5jaGVja2JveGVzQ29udHJvbFxuICB9KTtcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnQ291bnQgb2YgY29scyBpbiBjaGVja2JveCBncm91cCcsXG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdDogMVxuICB9KVxuICBASW5wdXQoKVxuICBjb2xzID0gMTtcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnU2l6ZSBmb3IgY2hlY2tib3ggaW4gY2hlY2tib3ggZ3JvdXAnLFxuICAgIHBhdGg6ICd1aS5zaXplJyxcbiAgICBvcHRpb25zOiBbU2l6ZS50aW55LCBTaXplLnNtYWxsLCBTaXplLm5vcm1hbCwgU2l6ZS5sYXJnZV0sXG4gICAgZGVmYXVsdDogU2l6ZS5ub3JtYWxcbiAgfSlcbiAgQElucHV0KClcbiAgc2V0IHNpemUoc2l6ZTogU2l6ZSkge1xuICAgIHRoaXMuX3NpemUgPSBzaXplIHx8IFNpemUubm9ybWFsO1xuICB9XG5cbiAgZ2V0IHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gIH1cblxuICBAQ29udGVudENoaWxkcmVuKENoZWNrYm94Q29tcG9uZW50KVxuICBjaGVja2JveGVzOiBRdWVyeUxpc3Q8Q2hlY2tib3hDb21wb25lbnQ+O1xuXG4gIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHRoaXMubG9nZ2VyLmVycm9yKCd2YWx1ZSBhY2Nlc3NvciBpcyBub3QgcmVnaXN0ZXJlZCcpO1xuICBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB0aGlzLmxvZ2dlci5lcnJvcigndmFsdWUgYWNjZXNzb3IgaXMgbm90IHJlZ2lzdGVyZWQnKTtcbiAgcmVnaXN0ZXJPbkNoYW5nZSA9IGZuID0+IHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgcmVnaXN0ZXJPblRvdWNoZWQgPSBmbiA9PiB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICBASG9zdExpc3RlbmVyKCdibHVyJykgb25CbHVyID0gKCkgPT4gdGhpcy5vblRvdWNoZWQoKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBsb2dnZXI6IE5HWExvZ2dlcikge1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMudXBkYXRlKCk7XG4gICAgdGhpcy5jaGVja2JveGVzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlKCkpO1xuXG4gICAgdGhpcy5jaGVja2JveGVzQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIG1hcChjaGVja2JveGVzID0+IHRoaXMuY2hlY2tib3hlc1xuICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBjaGVja2JveGVzW2ldKVxuICAgICAgICAubWFwKGNoZWNrYm94ID0+IGNoZWNrYm94LnZhbHVlKSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gaXNFcXVhbChhLCBiKSlcbiAgICApLnN1YnNjcmliZShzZWxlY3RlZEl0ZW1zID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHNlbGVjdGVkSXRlbXM7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHNlbGVjdGVkSXRlbXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlKCkge1xuICAgIGlmICghIXRoaXMuY2hlY2tib3hlcykge1xuICAgICAgdGhpcy5jaGVja2JveGVzQ29udHJvbC5yZXNldChbXSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMuY2hlY2tib3hlcy5mb3JFYWNoKChjaGVja2JveCwgaSkgPT4ge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGVja2JveGVzQ29udHJvbC5nZXQoaS50b1N0cmluZygpKTtcbiAgICAgICAgaWYgKCEhY29udHJvbCkge1xuICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodGhpcy5zZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKGNoZWNrYm94LnZhbHVlKSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNoZWNrYm94ZXNDb250cm9sLnB1c2gobmV3IEZvcm1Db250cm9sKHRoaXMuc2VsZWN0ZWRJdGVtcy5pbmNsdWRlcyhjaGVja2JveC52YWx1ZSkpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgbGV0IHNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICBpZiAoISF2YWx1ZSkge1xuICAgICAgc2VsZWN0ZWRJdGVtcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZEl0ZW1zO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICBpc0Rpc2FibGVkID8gdGhpcy5jaGVja2JveGVzQ29udHJvbC5kaXNhYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSlcbiAgICAgIDogdGhpcy5jaGVja2JveGVzQ29udHJvbC5lbmFibGUoe2VtaXRFdmVudDogZmFsc2V9KTtcbiAgfVxufVxuIl19