UNPKG

@taiga-ui/kit

Version:
166 lines • 18 kB
import { __decorate, __param, __read, __spread } from "tslib"; import { ChangeDetectionStrategy, Component, ContentChildren, Inject, Input, } from '@angular/core'; import { NgControl } from '@angular/forms'; import { EMPTY_QUERY, getOriginalArrayFromQueryList, isPresent, itemsQueryListObservable, TUI_DEFAULT_IDENTITY_MATCHER, tuiDefaultProp, tuiPure, tuiReplayedValueChangesFrom, } from '@taiga-ui/cdk'; import { sizeBigger, TUI_DATA_LIST_HOST, TuiOptionComponent, } from '@taiga-ui/core'; import { combineLatest } from 'rxjs'; import { map } from 'rxjs/operators'; var TuiMultiSelectGroupComponent = /** @class */ (function () { function TuiMultiSelectGroupComponent(host, control) { this.host = host; this.control = control; this.label = ''; this.options = EMPTY_QUERY; } Object.defineProperty(TuiMultiSelectGroupComponent.prototype, "size", { get: function () { return (this.options.first && this.options.first.size) || 'm'; }, enumerable: true, configurable: true }); Object.defineProperty(TuiMultiSelectGroupComponent.prototype, "checkboxSize", { get: function () { return this.options.first && sizeBigger(this.options.first.size) ? 'l' : 'm'; }, enumerable: true, configurable: true }); Object.defineProperty(TuiMultiSelectGroupComponent.prototype, "empty$", { get: function () { return itemsQueryListObservable(this.options).pipe(map(function (_a) { var length = _a.length; return !length; })); }, enumerable: true, configurable: true }); Object.defineProperty(TuiMultiSelectGroupComponent.prototype, "disabled$", { get: function () { return itemsQueryListObservable(this.options).pipe(map(function (items) { return items.every(function (_a) { var disabled = _a.disabled; return disabled; }); })); }, enumerable: true, configurable: true }); Object.defineProperty(TuiMultiSelectGroupComponent.prototype, "value$", { get: function () { var _this = this; return combineLatest(this.items$, this.valueChanges$).pipe(map(function (_a) { var _b = __read(_a, 2), items = _b[0], current = _b[1]; var result = false; var _loop_1 = function (i) { var selected = current.some(function (selected) { return _this.matcher(selected, items[i]); }); if ((!selected && result) || (selected && !result && i)) { return { value: null }; } result = selected; }; for (var i = 0; i < items.length; i++) { var state_1 = _loop_1(i); if (typeof state_1 === "object") return state_1.value; } return result; })); }, enumerable: true, configurable: true }); TuiMultiSelectGroupComponent.prototype.onClick = function (checked) { var _this = this; if (!this.control.control) { return; } var controlValue = this.control.value || []; var values = this.values; var filtered = controlValue.filter(function (current) { return values.every(function (item) { return !_this.matcher(current, item); }); }); this.control.control.setValue(checked ? filtered : __spread(filtered, values)); }; Object.defineProperty(TuiMultiSelectGroupComponent.prototype, "values", { get: function () { return this.filter(getOriginalArrayFromQueryList(this.options)); }, enumerable: true, configurable: true }); Object.defineProperty(TuiMultiSelectGroupComponent.prototype, "matcher", { get: function () { return this.host.identityMatcher || TUI_DEFAULT_IDENTITY_MATCHER; }, enumerable: true, configurable: true }); Object.defineProperty(TuiMultiSelectGroupComponent.prototype, "items$", { get: function () { return itemsQueryListObservable(this.options).pipe(map(function (options) { return options.map(function (_a) { var value = _a.value; return value; }).filter(isPresent); })); }, enumerable: true, configurable: true }); Object.defineProperty(TuiMultiSelectGroupComponent.prototype, "valueChanges$", { get: function () { return tuiReplayedValueChangesFrom(this.control).pipe(map(function (value) { return value || []; })); }, enumerable: true, configurable: true }); TuiMultiSelectGroupComponent.prototype.filter = function (items) { return items.map(function (_a) { var value = _a.value; return value; }).filter(isPresent); }; TuiMultiSelectGroupComponent.ctorParameters = function () { return [ { type: undefined, decorators: [{ type: Inject, args: [TUI_DATA_LIST_HOST,] }] }, { type: NgControl, decorators: [{ type: Inject, args: [NgControl,] }] } ]; }; __decorate([ Input(), tuiDefaultProp() ], TuiMultiSelectGroupComponent.prototype, "label", void 0); __decorate([ ContentChildren(TuiOptionComponent) ], TuiMultiSelectGroupComponent.prototype, "options", void 0); __decorate([ tuiPure ], TuiMultiSelectGroupComponent.prototype, "empty$", null); __decorate([ tuiPure ], TuiMultiSelectGroupComponent.prototype, "disabled$", null); __decorate([ tuiPure ], TuiMultiSelectGroupComponent.prototype, "value$", null); __decorate([ tuiPure ], TuiMultiSelectGroupComponent.prototype, "items$", null); __decorate([ tuiPure ], TuiMultiSelectGroupComponent.prototype, "valueChanges$", null); __decorate([ tuiPure ], TuiMultiSelectGroupComponent.prototype, "filter", null); TuiMultiSelectGroupComponent = __decorate([ Component({ selector: 'tui-opt-group[tuiMultiSelectGroup]', template: "<ng-container *tuiLet=\"value$ | async as value\">\n <button\n *ngIf=\"label && !(empty$ | async)\"\n tuiMultiSelectGroupReset\n tuiOption\n [size]=\"size\"\n [disabled]=\"disabled$ | async\"\n (click)=\"onClick(value)\"\n >\n <tui-primitive-checkbox\n class=\"tui-space_right-3\"\n [size]=\"checkboxSize\"\n [value]=\"value\"\n ></tui-primitive-checkbox>\n <span class=\"label\">{{label}}</span>\n </button>\n</ng-container>\n<ng-content></ng-content>\n", changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:flex;flex-direction:column}:host:before{content:''}.label{font:var(--tui-font-text-xs);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;color:var(--tui-text-02)}"] }), __param(0, Inject(TUI_DATA_LIST_HOST)), __param(1, Inject(NgControl)) ], TuiMultiSelectGroupComponent); return TuiMultiSelectGroupComponent; }()); export { TuiMultiSelectGroupComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0YWlnYS11aS9raXQvY29tcG9uZW50cy9tdWx0aS1zZWxlY3QvIiwic291cmNlcyI6WyJtdWx0aS1zZWxlY3QtZ3JvdXAvbXVsdGktc2VsZWN0LWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLE1BQU0sRUFDTixLQUFLLEdBRVIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sRUFDSCxXQUFXLEVBQ1gsNkJBQTZCLEVBQzdCLFNBQVMsRUFDVCx3QkFBd0IsRUFDeEIsNEJBQTRCLEVBQzVCLGNBQWMsRUFFZCxPQUFPLEVBQ1AsMkJBQTJCLEdBQzlCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDSCxVQUFVLEVBQ1Ysa0JBQWtCLEVBRWxCLGtCQUFrQixHQUdyQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxhQUFhLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBUW5DO0lBUUksc0NBQ2lELElBQXdCLEVBQ2pDLE9BQWtCO1FBRFQsU0FBSSxHQUFKLElBQUksQ0FBb0I7UUFDakMsWUFBTyxHQUFQLE9BQU8sQ0FBVztRQVAxRCxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBR00sWUFBTyxHQUFxQyxXQUFXLENBQUM7SUFLdEUsQ0FBQztJQUVKLHNCQUFJLDhDQUFJO2FBQVI7WUFDSSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDO1FBQ2xFLENBQUM7OztPQUFBO0lBRUQs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REFxQlA7SUF5QkQ7UUFEQyxPQUFPOzhEQUtQO0lBR0Q7UUFEQyxPQUFPO3FFQUtQO0lBR0Q7UUFEQyxPQUFPOzhEQUdQO0lBL0ZRLDRCQUE0QjtRQU54QyxTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsb0NBQW9DO1lBQzlDLDJqQkFBaUQ7WUFFakQsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O1NBQ2xELENBQUM7UUFVTyxXQUFBLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBQzFCLFdBQUEsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO09BVmIsNEJBQTRCLENBZ0d4QztJQUFELG1DQUFDO0NBQUEsQUFoR0QsSUFnR0M7U0FoR1ksNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBRdWVyeUxpc3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOZ0NvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgRU1QVFlfUVVFUlksXG4gICAgZ2V0T3JpZ2luYWxBcnJheUZyb21RdWVyeUxpc3QsXG4gICAgaXNQcmVzZW50LFxuICAgIGl0ZW1zUXVlcnlMaXN0T2JzZXJ2YWJsZSxcbiAgICBUVUlfREVGQVVMVF9JREVOVElUWV9NQVRDSEVSLFxuICAgIHR1aURlZmF1bHRQcm9wLFxuICAgIFR1aUlkZW50aXR5TWF0Y2hlcixcbiAgICB0dWlQdXJlLFxuICAgIHR1aVJlcGxheWVkVmFsdWVDaGFuZ2VzRnJvbSxcbn0gZnJvbSAnQHRhaWdhLXVpL2Nkayc7XG5pbXBvcnQge1xuICAgIHNpemVCaWdnZXIsXG4gICAgVFVJX0RBVEFfTElTVF9IT1NULFxuICAgIFR1aURhdGFMaXN0SG9zdCxcbiAgICBUdWlPcHRpb25Db21wb25lbnQsXG4gICAgVHVpU2l6ZUwsXG4gICAgVHVpU2l6ZVhTLFxufSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQge2NvbWJpbmVMYXRlc3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0dWktb3B0LWdyb3VwW3R1aU11bHRpU2VsZWN0R3JvdXBdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbXVsdGktc2VsZWN0LWdyb3VwLnRlbXBsYXRlLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL211bHRpLXNlbGVjdC1ncm91cC5zdHlsZS5sZXNzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFR1aU11bHRpU2VsZWN0R3JvdXBDb21wb25lbnQ8VD4ge1xuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBsYWJlbCA9ICcnO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihUdWlPcHRpb25Db21wb25lbnQpXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBRdWVyeUxpc3Q8VHVpT3B0aW9uQ29tcG9uZW50PFQ+PiA9IEVNUFRZX1FVRVJZO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoVFVJX0RBVEFfTElTVF9IT1NUKSBwcml2YXRlIHJlYWRvbmx5IGhvc3Q6IFR1aURhdGFMaXN0SG9zdDxUPixcbiAgICAgICAgQEluamVjdChOZ0NvbnRyb2wpIHByaXZhdGUgcmVhZG9ubHkgY29udHJvbDogTmdDb250cm9sLFxuICAgICkge31cblxuICAgIGdldCBzaXplKCk6IFR1aVNpemVYUyB8IFR1aVNpemVMIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLm9wdGlvbnMuZmlyc3QgJiYgdGhpcy5vcHRpb25zLmZpcnN0LnNpemUpIHx8ICdtJztcbiAgICB9XG5cbiAgICBnZXQgY2hlY2tib3hTaXplKCk6IFR1aVNpemVMIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maXJzdCAmJiBzaXplQmlnZ2VyKHRoaXMub3B0aW9ucy5maXJzdC5zaXplKSA/ICdsJyA6ICdtJztcbiAgICB9XG5cbiAgICBAdHVpUHVyZVxuICAgIGdldCBlbXB0eSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiBpdGVtc1F1ZXJ5TGlzdE9ic2VydmFibGUodGhpcy5vcHRpb25zKS5waXBlKG1hcCgoe2xlbmd0aH0pID0+ICFsZW5ndGgpKTtcbiAgICB9XG5cbiAgICBAdHVpUHVyZVxuICAgIGdldCBkaXNhYmxlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiBpdGVtc1F1ZXJ5TGlzdE9ic2VydmFibGUodGhpcy5vcHRpb25zKS5waXBlKFxuICAgICAgICAgICAgbWFwKGl0ZW1zID0+IGl0ZW1zLmV2ZXJ5KCh7ZGlzYWJsZWR9KSA9PiBkaXNhYmxlZCkpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIEB0dWlQdXJlXG4gICAgZ2V0IHZhbHVlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBudWxsPiB7XG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KHRoaXMuaXRlbXMkLCB0aGlzLnZhbHVlQ2hhbmdlcyQpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKFtpdGVtcywgY3VycmVudF0pID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gY3VycmVudC5zb21lKHNlbGVjdGVkID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXIoc2VsZWN0ZWQsIGl0ZW1zW2ldKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoKCFzZWxlY3RlZCAmJiByZXN1bHQpIHx8IChzZWxlY3RlZCAmJiAhcmVzdWx0ICYmIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGVjdGVkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvbkNsaWNrKGNoZWNrZWQ6IGJvb2xlYW4gfCBudWxsKSB7XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRyb2xWYWx1ZTogUmVhZG9ubHlBcnJheTxUPiA9IHRoaXMuY29udHJvbC52YWx1ZSB8fCBbXTtcbiAgICAgICAgY29uc3Qge3ZhbHVlc30gPSB0aGlzO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IGNvbnRyb2xWYWx1ZS5maWx0ZXIoY3VycmVudCA9PlxuICAgICAgICAgICAgdmFsdWVzLmV2ZXJ5KGl0ZW0gPT4gIXRoaXMubWF0Y2hlcihjdXJyZW50LCBpdGVtKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5jb250cm9sLmNvbnRyb2wuc2V0VmFsdWUoY2hlY2tlZCA/IGZpbHRlcmVkIDogWy4uLmZpbHRlcmVkLCAuLi52YWx1ZXNdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCB2YWx1ZXMoKTogUmVhZG9ubHlBcnJheTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcihnZXRPcmlnaW5hbEFycmF5RnJvbVF1ZXJ5TGlzdCh0aGlzLm9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBtYXRjaGVyKCk6IFR1aUlkZW50aXR5TWF0Y2hlcjxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvc3QuaWRlbnRpdHlNYXRjaGVyIHx8IFRVSV9ERUZBVUxUX0lERU5USVRZX01BVENIRVI7XG4gICAgfVxuXG4gICAgQHR1aVB1cmVcbiAgICBwcml2YXRlIGdldCBpdGVtcyQoKTogT2JzZXJ2YWJsZTxSZWFkb25seUFycmF5PFQ+PiB7XG4gICAgICAgIHJldHVybiBpdGVtc1F1ZXJ5TGlzdE9ic2VydmFibGUodGhpcy5vcHRpb25zKS5waXBlKFxuICAgICAgICAgICAgbWFwKG9wdGlvbnMgPT4gb3B0aW9ucy5tYXAoKHt2YWx1ZX0pID0+IHZhbHVlKS5maWx0ZXIoaXNQcmVzZW50KSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgQHR1aVB1cmVcbiAgICBwcml2YXRlIGdldCB2YWx1ZUNoYW5nZXMkKCk6IE9ic2VydmFibGU8UmVhZG9ubHlBcnJheTxUPj4ge1xuICAgICAgICByZXR1cm4gdHVpUmVwbGF5ZWRWYWx1ZUNoYW5nZXNGcm9tPFJlYWRvbmx5QXJyYXk8VD4+KHRoaXMuY29udHJvbCkucGlwZShcbiAgICAgICAgICAgIG1hcCh2YWx1ZSA9PiB2YWx1ZSB8fCBbXSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgQHR1aVB1cmVcbiAgICBwcml2YXRlIGZpbHRlcihpdGVtczogUmVhZG9ubHlBcnJheTxUdWlPcHRpb25Db21wb25lbnQ8VD4+KTogUmVhZG9ubHlBcnJheTxUPiB7XG4gICAgICAgIHJldHVybiBpdGVtcy5tYXAoKHt2YWx1ZX0pID0+IHZhbHVlKS5maWx0ZXIoaXNQcmVzZW50KTtcbiAgICB9XG59XG4iXX0=