ng-cornerstone
Version:
[](https://github.com/prettier/prettier) [](http://commitizen.git
108 lines • 16.1 kB
JavaScript
import { __decorate } from "tslib";
import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, HostBinding, Input, Output, } from '@angular/core';
import { debounceTime, filter, from, merge, startWith, Subject } from 'rxjs';
import { switchMap, takeUntil } from 'rxjs/operators';
import { ButtonComponent } from './button.component';
import { InputBoolean } from '../../core';
import * as i0 from "@angular/core";
export class ButtonGroupComponent {
constructor(cd) {
this.cd = cd;
this.lastEmittedValue = [];
this.destroy$ = new Subject();
this.buttonsChange$ = new Subject();
this.disabled = false;
/**
* Allows to keep multiple button toggles pressed. Off by default.
*/
this.multiple = false;
/**
* Emits when `nbButtonToggle` pressed state change. `$event` contains an array of the currently pressed button
* toggles.
*/
this.valueChange = new EventEmitter();
this.role = 'group';
}
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
}
ngAfterContentInit() {
this.buttonsChange$.pipe(takeUntil(this.destroy$)).subscribe((buttons) => {
this.listenButtonPressedState(buttons);
});
this.buttons.changes
.pipe(
// `buttons.changes` emit during change detection run after projected content already was initialized.
// So at this time, it's too late to update projected buttons properties as updating bindings after
// initialization doesn't make sense. Changes won't be picked up and should cause an "expression changed" error.
// Instead, we wrap the new buttons list into a promise to defer update to the following microtask and also to
// trigger change detection one more time.
switchMap((buttons) => from(Promise.resolve(buttons.toArray()))), takeUntil(this.destroy$))
.subscribe((value) => this.buttonsChange$.next(value));
this.buttonsChange$.next(this.buttons.toArray());
}
listenButtonPressedState(buttons) {
const toggleButtons = buttons.filter((button) => {
return button.isToggle;
});
if (!toggleButtons.length) {
return;
}
const buttonsPressedChange$ = toggleButtons.map((button) => button.pressedChange$);
merge(...buttonsPressedChange$)
.pipe(filter(({ pressed }) => !this.multiple && pressed), takeUntil(merge(this.buttonsChange$, this.destroy$)))
.subscribe(({ source }) => {
toggleButtons
.filter((button) => button !== source)
.forEach((button) => button._updatePressed(false));
});
merge(...buttonsPressedChange$)
.pipe(
// Use startWith to emit if some buttons are initially pressed.
startWith(''),
// Use debounce to emit change once when pressed state change in multiple button toggles.
debounceTime(0), takeUntil(merge(this.buttonsChange$, this.destroy$)))
.subscribe(() => this.emitCurrentValue(toggleButtons));
}
emitCurrentValue(toggleButtons) {
const pressedToggleValues = toggleButtons
.filter((b) => b.pressed && typeof b.value !== 'undefined')
.map((b) => b.value);
// Prevent multiple emissions of empty value.
if (pressedToggleValues.length === 0 && this.lastEmittedValue.length === 0) {
return;
}
this.valueChange.emit(pressedToggleValues);
this.lastEmittedValue = pressedToggleValues;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ButtonGroupComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ButtonGroupComponent, selector: "nc-button-group", inputs: { disabled: "disabled", multiple: "multiple" }, outputs: { valueChange: "valueChange" }, host: { properties: { "attr.role": "this.role" } }, queries: [{ propertyName: "buttons", predicate: ButtonComponent }], ngImport: i0, template: ` <ng-content></ng-content> `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
__decorate([
InputBoolean()
], ButtonGroupComponent.prototype, "disabled", void 0);
__decorate([
InputBoolean()
], ButtonGroupComponent.prototype, "multiple", void 0);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ButtonGroupComponent, decorators: [{
type: Component,
args: [{
selector: 'nc-button-group',
template: ` <ng-content></ng-content> `,
changeDetection: ChangeDetectionStrategy.OnPush,
}]
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { buttons: [{
type: ContentChildren,
args: [ButtonComponent]
}], disabled: [{
type: Input
}], multiple: [{
type: Input
}], valueChange: [{
type: Output
}], role: [{
type: HostBinding,
args: ['attr.role']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvcm5lcnN0b25lL3NyYy9saWIvY29tcG9uZW50cy9idXR0b24vYnV0dG9uLWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFjLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekYsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZUFBZSxFQUFzQixNQUFNLG9CQUFvQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBTzFDLE1BQU0sT0FBTyxvQkFBb0I7SUE4Qi9CLFlBQXNCLEVBQXFCO1FBQXJCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBN0JqQyxxQkFBZ0IsR0FBVSxFQUFFLENBQUM7UUFFcEIsYUFBUSxHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQzlDLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQXFCLENBQUM7UUFPM0QsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUczQjs7V0FFRztRQUdPLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFHcEM7OztXQUdHO1FBQ08sZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBRXhCLFNBQUksR0FBRyxPQUFPLENBQUM7SUFFSyxDQUFDO0lBRS9DLFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFD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SyxLQUFLLFdBQVcsQ0FBQzthQUMzRSxHQUFHLENBQUMsQ0FBQyxDQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEMsNkNBQTZDO1FBQzdDLElBQUksbUJBQW1CLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNFLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUM7SUFDOUMsQ0FBQzsrR0F4R1Usb0JBQW9CO21HQUFwQixvQkFBb0Isb09BTWQsZUFBZSw2QkFUdEIsNkJBQTZCOztBQWM3QjtJQURULFlBQVksRUFBRTtzREFDWTtBQVFqQjtJQURULFlBQVksRUFBRTtzREFDcUI7NEZBbkJ6QixvQkFBb0I7a0JBTGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsUUFBUSxFQUFFLDZCQUE2QjtvQkFDdkMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEO3NGQVFVLE9BQU87c0JBRGYsZUFBZTt1QkFBQyxlQUFlO2dCQUt0QixRQUFRO3NCQUZqQixLQUFLO2dCQVVJLFFBQVE7c0JBRmpCLEtBQUs7Z0JBU0ksV0FBVztzQkFBcEIsTUFBTTtnQkFFbUIsSUFBSTtzQkFBN0IsV0FBVzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGZyb20sIG1lcmdlLCBPYnNlcnZhYmxlLCBzdGFydFdpdGgsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQsIEJ1dHRvblRvZ2dsZUNoYW5nZSB9IGZyb20gJy4vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgSW5wdXRCb29sZWFuIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25jLWJ1dHRvbi1ncm91cCcsXG4gIHRlbXBsYXRlOiBgIDxuZy1jb250ZW50PjwvbmctY29udGVudD4gYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEJ1dHRvbkdyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgcHJvdGVjdGVkIGxhc3RFbWl0dGVkVmFsdWU6IGFueVtdID0gW107XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJ1dHRvbnNDaGFuZ2UkID0gbmV3IFN1YmplY3Q8QnV0dG9uQ29tcG9uZW50W10+KCk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihCdXR0b25Db21wb25lbnQpXG4gIHJlYWRvbmx5IGJ1dHRvbnMhOiBRdWVyeUxpc3Q8QnV0dG9uQ29tcG9uZW50PjtcblxuICBASW5wdXQoKVxuICBASW5wdXRCb29sZWFuKClcbiAgcHJvdGVjdGVkIGRpc2FibGVkID0gZmFsc2U7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9kaXNhYmxlZDogQm9vbGVhbklucHV0O1xuXG4gIC8qKlxuICAgKiBBbGxvd3MgdG8ga2VlcCBtdWx0aXBsZSBidXR0b24gdG9nZ2xlcyBwcmVzc2VkLiBPZmYgYnkgZGVmYXVsdC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIEBJbnB1dEJvb2xlYW4oKVxuICBwcm90ZWN0ZWQgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX211bHRpcGxlOiBCb29sZWFuSW5wdXQ7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHdoZW4gYG5iQnV0dG9uVG9nZ2xlYCBwcmVzc2VkIHN0YXRlIGNoYW5nZS4gYCRldmVudGAgY29udGFpbnMgYW4gYXJyYXkgb2YgdGhlIGN1cnJlbnRseSBwcmVzc2VkIGJ1dHRvblxuICAgKiB0b2dnbGVzLlxuICAgKi9cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpIHJvbGUgPSAnZ3JvdXAnO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYnV0dG9uc0NoYW5nZSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoYnV0dG9uczogQnV0dG9uQ29tcG9uZW50W10pID0+IHtcbiAgICAgIHRoaXMubGlzdGVuQnV0dG9uUHJlc3NlZFN0YXRlKGJ1dHRvbnMpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5idXR0b25zLmNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICAvLyBgYnV0dG9ucy5jaGFuZ2VzYCBlbWl0IGR1cmluZyBjaGFuZ2UgZGV0ZWN0aW9uIHJ1biBhZnRlciBwcm9qZWN0ZWQgY29udGVudCBhbHJlYWR5IHdhcyBpbml0aWFsaXplZC5cbiAgICAgICAgLy8gU28gYXQgdGhpcyB0aW1lLCBpdCdzIHRvbyBsYXRlIHRvIHVwZGF0ZSBwcm9qZWN0ZWQgYnV0dG9ucyBwcm9wZXJ0aWVzIGFzIHVwZGF0aW5nIGJpbmRpbmdzIGFmdGVyXG4gICAgICAgIC8vIGluaXRpYWxpemF0aW9uIGRvZXNuJ3QgbWFrZSBzZW5zZS4gQ2hhbmdlcyB3b24ndCBiZSBwaWNrZWQgdXAgYW5kIHNob3VsZCBjYXVzZSBhbiBcImV4cHJlc3Npb24gY2hhbmdlZFwiIGVycm9yLlxuICAgICAgICAvLyBJbnN0ZWFkLCB3ZSB3cmFwIHRoZSBuZXcgYnV0dG9ucyBsaXN0IGludG8gYSBwcm9taXNlIHRvIGRlZmVyIHVwZGF0ZSB0byB0aGUgZm9sbG93aW5nIG1pY3JvdGFzayBhbmQgYWxzbyB0b1xuICAgICAgICAvLyB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gb25lIG1vcmUgdGltZS5cbiAgICAgICAgc3dpdGNoTWFwKChidXR0b25zOiBRdWVyeUxpc3Q8QnV0dG9uQ29tcG9uZW50PikgPT4gZnJvbShQcm9taXNlLnJlc29sdmUoYnV0dG9ucy50b0FycmF5KCkpKSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLmJ1dHRvbnNDaGFuZ2UkLm5leHQodmFsdWUpKTtcblxuICAgIHRoaXMuYnV0dG9uc0NoYW5nZSQubmV4dCh0aGlzLmJ1dHRvbnMudG9BcnJheSgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBsaXN0ZW5CdXR0b25QcmVzc2VkU3RhdGUoYnV0dG9uczogQnV0dG9uQ29tcG9uZW50W10pOiB2b2lkIHtcbiAgICBjb25zdCB0b2dnbGVCdXR0b25zOiBCdXR0b25Db21wb25lbnRbXSA9IGJ1dHRvbnMuZmlsdGVyKChidXR0b246IEJ1dHRvbkNvbXBvbmVudCkgPT4ge1xuICAgICAgcmV0dXJuIGJ1dHRvbi5pc1RvZ2dsZTtcbiAgICB9KTtcblxuICAgIGlmICghdG9nZ2xlQnV0dG9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBidXR0b25zUHJlc3NlZENoYW5nZSQ6IE9ic2VydmFibGU8QnV0dG9uVG9nZ2xlQ2hhbmdlPltdID0gdG9nZ2xlQnV0dG9ucy5tYXAoXG4gICAgICAoYnV0dG9uOiBCdXR0b25Db21wb25lbnQpID0+IGJ1dHRvbi5wcmVzc2VkQ2hhbmdlJCxcbiAgICApO1xuXG4gICAgbWVyZ2UoLi4uYnV0dG9uc1ByZXNzZWRDaGFuZ2UkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoeyBwcmVzc2VkIH06IEJ1dHRvblRvZ2dsZUNoYW5nZSkgPT4gIXRoaXMubXVsdGlwbGUgJiYgcHJlc3NlZCksXG4gICAgICAgIHRha2VVbnRpbChtZXJnZSh0aGlzLmJ1dHRvbnNDaGFuZ2UkLCB0aGlzLmRlc3Ryb3kkKSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7IHNvdXJjZSB9OiBCdXR0b25Ub2dnbGVDaGFuZ2UpID0+IHtcbiAgICAgICAgdG9nZ2xlQnV0dG9uc1xuICAgICAgICAgIC5maWx0ZXIoKGJ1dHRvbjogQnV0dG9uQ29tcG9uZW50KSA9PiBidXR0b24gIT09IHNvdXJjZSlcbiAgICAgICAgICAuZm9yRWFjaCgoYnV0dG9uOiBCdXR0b25Db21wb25lbnQpID0+IGJ1dHRvbi5fdXBkYXRlUHJlc3NlZChmYWxzZSkpO1xuICAgICAgfSk7XG5cbiAgICBtZXJnZSguLi5idXR0b25zUHJlc3NlZENoYW5nZSQpXG4gICAgICAucGlwZShcbiAgICAgICAgLy8gVXNlIHN0YXJ0V2l0aCB0byBlbWl0IGlmIHNvbWUgYnV0dG9ucyBhcmUgaW5pdGlhbGx5IHByZXNzZWQuXG4gICAgICAgIHN0YXJ0V2l0aCgnJyksXG4gICAgICAgIC8vIFVzZSBkZWJvdW5jZSB0byBlbWl0IGNoYW5nZSBvbmNlIHdoZW4gcHJlc3NlZCBzdGF0ZSBjaGFuZ2UgaW4gbXVsdGlwbGUgYnV0dG9uIHRvZ2dsZXMuXG4gICAgICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICAgICAgdGFrZVVudGlsKG1lcmdlKHRoaXMuYnV0dG9uc0NoYW5nZSQsIHRoaXMuZGVzdHJveSQpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5lbWl0Q3VycmVudFZhbHVlKHRvZ2dsZUJ1dHRvbnMpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlbWl0Q3VycmVudFZhbHVlKHRvZ2dsZUJ1dHRvbnM6IEJ1dHRvbkNvbXBvbmVudFtdKTogdm9pZCB7XG4gICAgY29uc3QgcHJlc3NlZFRvZ2dsZVZhbHVlcyA9IHRvZ2dsZUJ1dHRvbnNcbiAgICAgIC5maWx0ZXIoKGI6IEJ1dHRvbkNvbXBvbmVudCkgPT4gYi5wcmVzc2VkICYmIHR5cGVvZiBiLnZhbHVlICE9PSAndW5kZWZpbmVkJylcbiAgICAgIC5tYXAoKGI6IEJ1dHRvbkNvbXBvbmVudCkgPT4gYi52YWx1ZSk7XG5cbiAgICAvLyBQcmV2ZW50IG11bHRpcGxlIGVtaXNzaW9ucyBvZiBlbXB0eSB2YWx1ZS5cbiAgICBpZiAocHJlc3NlZFRvZ2dsZVZhbHVlcy5sZW5ndGggPT09IDAgJiYgdGhpcy5sYXN0RW1pdHRlZFZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChwcmVzc2VkVG9nZ2xlVmFsdWVzKTtcbiAgICB0aGlzLmxhc3RFbWl0dGVkVmFsdWUgPSBwcmVzc2VkVG9nZ2xlVmFsdWVzO1xuICB9XG59XG4iXX0=