UNPKG

@taiga-ui/kit

Version:
105 lines 15.1 kB
import { __decorate, __param } 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'; let TuiMultiSelectGroupComponent = class TuiMultiSelectGroupComponent { constructor(host, control) { this.host = host; this.control = control; this.label = ''; this.options = EMPTY_QUERY; } get size() { return (this.options.first && this.options.first.size) || 'm'; } get checkboxSize() { return this.options.first && sizeBigger(this.options.first.size) ? 'l' : 'm'; } get empty$() { return itemsQueryListObservable(this.options).pipe(map(({ length }) => !length)); } get disabled$() { return itemsQueryListObservable(this.options).pipe(map(items => items.every(({ disabled }) => disabled))); } get value$() { return combineLatest(this.items$, this.valueChanges$).pipe(map(([items, current]) => { let result = false; for (let i = 0; i < items.length; i++) { const selected = current.some(selected => this.matcher(selected, items[i])); if ((!selected && result) || (selected && !result && i)) { return null; } result = selected; } return result; })); } onClick(checked) { if (!this.control.control) { return; } const controlValue = this.control.value || []; const { values } = this; const filtered = controlValue.filter(current => values.every(item => !this.matcher(current, item))); this.control.control.setValue(checked ? filtered : [...filtered, ...values]); } get values() { return this.filter(getOriginalArrayFromQueryList(this.options)); } get matcher() { return this.host.identityMatcher || TUI_DEFAULT_IDENTITY_MATCHER; } get items$() { return itemsQueryListObservable(this.options).pipe(map(options => options.map(({ value }) => value).filter(isPresent))); } get valueChanges$() { return tuiReplayedValueChangesFrom(this.control).pipe(map(value => value || [])); } filter(items) { return items.map(({ value }) => value).filter(isPresent); } }; TuiMultiSelectGroupComponent.ctorParameters = () => [ { 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); export { TuiMultiSelectGroupComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0YWlnYS11aS9raXQvY29tcG9uZW50cy9tdWx0aS1zZWxlY3QvIiwic291cmNlcyI6WyJtdWx0aS1zZWxlY3QtZ3JvdXAvbXVsdGktc2VsZWN0LWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLE1BQU0sRUFDTixLQUFLLEdBRVIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sRUFDSCxXQUFXLEVBQ1gsNkJBQTZCLEVBQzdCLFNBQVMsRUFDVCx3QkFBd0IsRUFDeEIsNEJBQTRCLEVBQzVCLGNBQWMsRUFFZCxPQUFPLEVBQ1AsMkJBQTJCLEdBQzlCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDSCxVQUFVLEVBQ1Ysa0JBQWtCLEVBRWxCLGtCQUFrQixHQUdyQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxhQUFhLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBUW5DLElBQWEsNEJBQTRCLEdBQXpDLE1BQWEsNEJBQTRCO0lBUXJDLFlBQ2lELElBQXdCLEVBQ2pDLE9BQWtCO1FBRFQsU0FBSSxHQUFKLElBQUksQ0FBb0I7UUFDakMsWUFBTyxHQUFQLE9BQU8sQ0FBVztRQVAxRCxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBR00sWUFBTyxHQUFxQyxXQUFXLENBQUM7SUFLdEUsQ0FBQztJQUVKLElBQUksSUFBSTtRQUNKLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUM7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QUE7SUFDMUIsV0FBQSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7R0FWYiw0QkFBNEIsQ0FnR3hDO1NBaEdZLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgUXVlcnlMaXN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmdDb250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIEVNUFRZX1FVRVJZLFxuICAgIGdldE9yaWdpbmFsQXJyYXlGcm9tUXVlcnlMaXN0LFxuICAgIGlzUHJlc2VudCxcbiAgICBpdGVtc1F1ZXJ5TGlzdE9ic2VydmFibGUsXG4gICAgVFVJX0RFRkFVTFRfSURFTlRJVFlfTUFUQ0hFUixcbiAgICB0dWlEZWZhdWx0UHJvcCxcbiAgICBUdWlJZGVudGl0eU1hdGNoZXIsXG4gICAgdHVpUHVyZSxcbiAgICB0dWlSZXBsYXllZFZhbHVlQ2hhbmdlc0Zyb20sXG59IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHtcbiAgICBzaXplQmlnZ2VyLFxuICAgIFRVSV9EQVRBX0xJU1RfSE9TVCxcbiAgICBUdWlEYXRhTGlzdEhvc3QsXG4gICAgVHVpT3B0aW9uQ29tcG9uZW50LFxuICAgIFR1aVNpemVMLFxuICAgIFR1aVNpemVYUyxcbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHtjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndHVpLW9wdC1ncm91cFt0dWlNdWx0aVNlbGVjdEdyb3VwXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL211bHRpLXNlbGVjdC1ncm91cC50ZW1wbGF0ZS5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9tdWx0aS1zZWxlY3QtZ3JvdXAuc3R5bGUubGVzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUdWlNdWx0aVNlbGVjdEdyb3VwQ29tcG9uZW50PFQ+IHtcbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgbGFiZWwgPSAnJztcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oVHVpT3B0aW9uQ29tcG9uZW50KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogUXVlcnlMaXN0PFR1aU9wdGlvbkNvbXBvbmVudDxUPj4gPSBFTVBUWV9RVUVSWTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFRVSV9EQVRBX0xJU1RfSE9TVCkgcHJpdmF0ZSByZWFkb25seSBob3N0OiBUdWlEYXRhTGlzdEhvc3Q8VD4sXG4gICAgICAgIEBJbmplY3QoTmdDb250cm9sKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2w6IE5nQ29udHJvbCxcbiAgICApIHt9XG5cbiAgICBnZXQgc2l6ZSgpOiBUdWlTaXplWFMgfCBUdWlTaXplTCB7XG4gICAgICAgIHJldHVybiAodGhpcy5vcHRpb25zLmZpcnN0ICYmIHRoaXMub3B0aW9ucy5maXJzdC5zaXplKSB8fCAnbSc7XG4gICAgfVxuXG4gICAgZ2V0IGNoZWNrYm94U2l6ZSgpOiBUdWlTaXplTCB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmlyc3QgJiYgc2l6ZUJpZ2dlcih0aGlzLm9wdGlvbnMuZmlyc3Quc2l6ZSkgPyAnbCcgOiAnbSc7XG4gICAgfVxuXG4gICAgQHR1aVB1cmVcbiAgICBnZXQgZW1wdHkkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gaXRlbXNRdWVyeUxpc3RPYnNlcnZhYmxlKHRoaXMub3B0aW9ucykucGlwZShtYXAoKHtsZW5ndGh9KSA9PiAhbGVuZ3RoKSk7XG4gICAgfVxuXG4gICAgQHR1aVB1cmVcbiAgICBnZXQgZGlzYWJsZWQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gaXRlbXNRdWVyeUxpc3RPYnNlcnZhYmxlKHRoaXMub3B0aW9ucykucGlwZShcbiAgICAgICAgICAgIG1hcChpdGVtcyA9PiBpdGVtcy5ldmVyeSgoe2Rpc2FibGVkfSkgPT4gZGlzYWJsZWQpKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBAdHVpUHVyZVxuICAgIGdldCB2YWx1ZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdCh0aGlzLml0ZW1zJCwgdGhpcy52YWx1ZUNoYW5nZXMkKS5waXBlKFxuICAgICAgICAgICAgbWFwKChbaXRlbXMsIGN1cnJlbnRdKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGN1cnJlbnQuc29tZShzZWxlY3RlZCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVyKHNlbGVjdGVkLCBpdGVtc1tpXSksXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCghc2VsZWN0ZWQgJiYgcmVzdWx0KSB8fCAoc2VsZWN0ZWQgJiYgIXJlc3VsdCAmJiBpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxlY3RlZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb25DbGljayhjaGVja2VkOiBib29sZWFuIHwgbnVsbCkge1xuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5jb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250cm9sVmFsdWU6IFJlYWRvbmx5QXJyYXk8VD4gPSB0aGlzLmNvbnRyb2wudmFsdWUgfHwgW107XG4gICAgICAgIGNvbnN0IHt2YWx1ZXN9ID0gdGhpcztcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBjb250cm9sVmFsdWUuZmlsdGVyKGN1cnJlbnQgPT5cbiAgICAgICAgICAgIHZhbHVlcy5ldmVyeShpdGVtID0+ICF0aGlzLm1hdGNoZXIoY3VycmVudCwgaXRlbSkpLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuY29udHJvbC5jb250cm9sLnNldFZhbHVlKGNoZWNrZWQgPyBmaWx0ZXJlZCA6IFsuLi5maWx0ZXJlZCwgLi4udmFsdWVzXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgdmFsdWVzKCk6IFJlYWRvbmx5QXJyYXk8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZ2V0T3JpZ2luYWxBcnJheUZyb21RdWVyeUxpc3QodGhpcy5vcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgbWF0Y2hlcigpOiBUdWlJZGVudGl0eU1hdGNoZXI8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3N0LmlkZW50aXR5TWF0Y2hlciB8fCBUVUlfREVGQVVMVF9JREVOVElUWV9NQVRDSEVSO1xuICAgIH1cblxuICAgIEB0dWlQdXJlXG4gICAgcHJpdmF0ZSBnZXQgaXRlbXMkKCk6IE9ic2VydmFibGU8UmVhZG9ubHlBcnJheTxUPj4ge1xuICAgICAgICByZXR1cm4gaXRlbXNRdWVyeUxpc3RPYnNlcnZhYmxlKHRoaXMub3B0aW9ucykucGlwZShcbiAgICAgICAgICAgIG1hcChvcHRpb25zID0+IG9wdGlvbnMubWFwKCh7dmFsdWV9KSA9PiB2YWx1ZSkuZmlsdGVyKGlzUHJlc2VudCkpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIEB0dWlQdXJlXG4gICAgcHJpdmF0ZSBnZXQgdmFsdWVDaGFuZ2VzJCgpOiBPYnNlcnZhYmxlPFJlYWRvbmx5QXJyYXk8VD4+IHtcbiAgICAgICAgcmV0dXJuIHR1aVJlcGxheWVkVmFsdWVDaGFuZ2VzRnJvbTxSZWFkb25seUFycmF5PFQ+Pih0aGlzLmNvbnRyb2wpLnBpcGUoXG4gICAgICAgICAgICBtYXAodmFsdWUgPT4gdmFsdWUgfHwgW10pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIEB0dWlQdXJlXG4gICAgcHJpdmF0ZSBmaWx0ZXIoaXRlbXM6IFJlYWRvbmx5QXJyYXk8VHVpT3B0aW9uQ29tcG9uZW50PFQ+Pik6IFJlYWRvbmx5QXJyYXk8VD4ge1xuICAgICAgICByZXR1cm4gaXRlbXMubWFwKCh7dmFsdWV9KSA9PiB2YWx1ZSkuZmlsdGVyKGlzUHJlc2VudCk7XG4gICAgfVxufVxuIl19