@taiga-ui/kit
Version:
Taiga UI Angular main components kit
166 lines • 18 kB
JavaScript
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=