UNPKG

@junte/ui

Version:

Quality Angular UI components kit

126 lines 16.7 kB
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