materialize-angular
Version:
Material UI Angular library
198 lines • 15.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: app/completed-components/button-toggle-group/button-toggle-group.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @license
* Copyright Workylab. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://raw.githubusercontent.com/workylab/materialize-angular/master/LICENSE
*/
import { Component, ContentChildren, EventEmitter, forwardRef, Input, Output, QueryList } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { ButtonToggleComponent } from './button-toggle/button-toggle.component';
import { config } from '../../config';
export class ButtonToggleGroupComponent {
constructor() {
this.canUncheck = ButtonToggleGroupComponent.defaultProps.canUncheck;
this.className = ButtonToggleGroupComponent.defaultProps.className;
this.disabled = ButtonToggleGroupComponent.defaultProps.disabled;
this.value = ButtonToggleGroupComponent.defaultProps.value;
this.prefix = config.components.prefix;
this.isFocused = false;
this.onChangeEmitter = new EventEmitter();
this.initButtons = this.initButtons.bind(this);
this.registerButtons = this.registerButtons.bind(this);
this.toggleButton = this.toggleButton.bind(this);
}
/**
* @return {?}
*/
ngAfterContentInit() {
this.initButtons();
this.buttonsQueryList.changes.subscribe(this.initButtons);
}
/**
* @return {?}
*/
initButtons() {
if (this.disabled) {
this.disableButtons(this.disabled);
}
setTimeout(this.registerButtons, 0);
}
/**
* @param {?} disabled
* @return {?}
*/
disableButtons(disabled) {
this.buttonsQueryList.forEach((/**
* @param {?} item
* @return {?}
*/
item => {
item.disabled = disabled;
}));
}
/**
* @return {?}
*/
registerButtons() {
this.buttonsQueryList.forEach((/**
* @param {?} button
* @return {?}
*/
button => {
button.isActive = (this.value.lastIndexOf(button.value) >= 0);
button.onClickEmitter.subscribe(this.toggleButton);
}));
}
/**
* @param {?} value
* @return {?}
*/
toggleButton(value) {
this.setValueAllButtons(value);
/** @type {?} */
const currentButton = this.buttonsQueryList.find((/**
* @param {?} item
* @return {?}
*/
item => item.value === value));
this.value = currentButton && currentButton.isActive
? currentButton.value
: '';
this.onTouched();
this.onChange(this.value);
this.onChangeEmitter.emit(this.value);
}
/**
* @param {?} value
* @return {?}
*/
setValueAllButtons(value) {
this.buttonsQueryList.forEach((/**
* @param {?} button
* @return {?}
*/
button => {
if (button.value !== value) {
button.isActive = false;
}
if (button.value === value && !this.canUncheck) {
button.isActive = true;
}
}));
}
/**
* @param {?} isDisabled
* @return {?}
*/
setDisabledState(isDisabled) {
this.disabled = isDisabled;
this.disableButtons(this.disabled);
}
/**
* @param {?} value
* @return {?}
*/
writeValue(value) {
this.value = value;
}
/**
* @param {?} fn
* @return {?}
*/
registerOnChange(fn) {
this.onChange = fn;
}
/**
* @param {?} fn
* @return {?}
*/
registerOnTouched(fn) {
this.onTouched = fn;
}
/**
* @param {?} value
* @return {?}
*/
onChange(value) { }
/**
* @return {?}
*/
onTouched() { }
}
ButtonToggleGroupComponent.defaultProps = {
canUncheck: false,
className: '',
disabled: false,
value: ''
};
ButtonToggleGroupComponent.decorators = [
{ type: Component, args: [{
providers: [{
multi: true,
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef((/**
* @return {?}
*/
() => ButtonToggleGroupComponent))
}],
selector: `${config.components.prefix}-button-toggle-group }`,
template: "<div \n [ngClass]=\"[prefix + '-button-toggle-group', className]\"\n [class.disabled]=\"disabled\"\n>\n <ng-content select=\"materialize-button-toggle\"></ng-content>\n</div>\n "
}] }
];
/** @nocollapse */
ButtonToggleGroupComponent.ctorParameters = () => [];
ButtonToggleGroupComponent.propDecorators = {
buttonsQueryList: [{ type: ContentChildren, args: [ButtonToggleComponent,] }],
onChangeEmitter: [{ type: Output, args: ['onChange',] }],
canUncheck: [{ type: Input }],
className: [{ type: Input }],
disabled: [{ type: Input }],
value: [{ type: Input }]
};
if (false) {
/** @type {?} */
ButtonToggleGroupComponent.defaultProps;
/** @type {?} */
ButtonToggleGroupComponent.prototype.buttonsQueryList;
/** @type {?} */
ButtonToggleGroupComponent.prototype.onChangeEmitter;
/** @type {?} */
ButtonToggleGroupComponent.prototype.canUncheck;
/** @type {?} */
ButtonToggleGroupComponent.prototype.className;
/** @type {?} */
ButtonToggleGroupComponent.prototype.disabled;
/** @type {?} */
ButtonToggleGroupComponent.prototype.value;
/** @type {?} */
ButtonToggleGroupComponent.prototype.prefix;
/** @type {?} */
ButtonToggleGroupComponent.prototype.isFocused;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLXRvZ2dsZS1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9tYXRlcmlhbGl6ZS1hbmd1bGFyLyIsInNvdXJjZXMiOlsiYXBwL2NvbXBsZXRlZC1jb21wb25lbnRzL2J1dHRvbi10b2dnbGUtZ3JvdXAvYnV0dG9uLXRvZ2dsZS1ncm91cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBUUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFaEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQVd0QyxNQUFNLE9BQU8sMEJBQTBCO0lBcUJyQztRQVRTLGVBQVUsR0FBWSwwQkFBMEIsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDO1FBQ3pFLGNBQVMsR0FBVywwQkFBMEIsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBQ3RFLGFBQVEsR0FBWSwwQkFBMEIsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO1FBQ3JFLFVBQUssR0FBVywwQkFBMEIsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBRWhFLFdBQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUt2QyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsZUFBZSxHQUFH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LFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQzs7Ozs7SUFFRCxpQkFBaUIsQ0FBQyxFQUFjO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7Ozs7O0lBRUQsUUFBUSxDQUFDLEtBQWEsSUFBUyxDQUFDOzs7O0lBRWhDLFNBQVMsS0FBVSxDQUFDOztBQXhHSix1Q0FBWSxHQUEyQjtJQUNyRCxVQUFVLEVBQUUsS0FBSztJQUNqQixTQUFTLEVBQUUsRUFBRTtJQUNiLFFBQVEsRUFBRSxLQUFLO0lBQ2YsS0FBSyxFQUFFLEVBQUU7Q0FDVixDQUFDOztZQWZILFNBQVMsU0FBQztnQkFDVCxTQUFTLEVBQUUsQ0FBQzt3QkFDVixLQUFLLEVBQUUsSUFBSTt3QkFDWCxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsVUFBVTs7O3dCQUFDLEdBQUcsRUFBRSxDQUFDLDBCQUEwQixFQUFDO3FCQUMxRCxDQUFDO2dCQUNGLFFBQVEsRUFBRSxHQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTyx3QkFBd0I7Z0JBQy9ELGlNQUFtRDthQUNwRDs7Ozs7K0JBU0UsZUFBZSxTQUFDLHFCQUFxQjs4QkFFckMsTUFBTSxTQUFDLFVBQVU7eUJBRWpCLEtBQUs7d0JBQ0wsS0FBSzt1QkFDTCxLQUFLO29CQUNMLEtBQUs7Ozs7SUFkTix3Q0FLRTs7SUFFRixzREFBMkY7O0lBRTNGLHFEQUEwRDs7SUFFMUQsZ0RBQWtGOztJQUNsRiwrQ0FBK0U7O0lBQy9FLDhDQUE4RTs7SUFDOUUsMkNBQXVFOztJQUV2RSw0Q0FBeUM7O0lBRXpDLCtDQUEwQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBXb3JreWxhYi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vd29ya3lsYWIvbWF0ZXJpYWxpemUtYW5ndWxhci9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJ1dHRvblRvZ2dsZUNvbXBvbmVudCB9IGZyb20gJy4vYnV0dG9uLXRvZ2dsZS9idXR0b24tdG9nZ2xlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25Ub2dnbGVHcm91cE1vZGVsIH0gZnJvbSAnLi9idXR0b24tdG9nZ2xlLWdyb3VwLm1vZGVsJztcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5cbkBDb21wb25lbnQoe1xuICBwcm92aWRlcnM6IFt7XG4gICAgbXVsdGk6IHRydWUsXG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQnV0dG9uVG9nZ2xlR3JvdXBDb21wb25lbnQpXG4gIH1dLFxuICBzZWxlY3RvcjogYCR7IGNvbmZpZy5jb21wb25lbnRzLnByZWZpeCB9LWJ1dHRvbi10b2dnbGUtZ3JvdXAgfWAsXG4gIHRlbXBsYXRlVXJsOiAnLi9idXR0b24tdG9nZ2xlLWdyb3VwLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBCdXR0b25Ub2dnbGVHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlckNvbnRlbnRJbml0LCBCdXR0b25Ub2dnbGVHcm91cE1vZGVsIHtcbiAgc3RhdGljIHJlYWRvbmx5IGRlZmF1bHRQcm9wczogQnV0dG9uVG9nZ2xlR3JvdXBNb2RlbCA9IHtcbiAgICBjYW5VbmNoZWNrOiBmYWxzZSxcbiAgICBjbGFzc05hbWU6ICcnLFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICB2YWx1ZTogJydcbiAgfTtcblxuICBAQ29udGVudENoaWxkcmVuKEJ1dHRvblRvZ2dsZUNvbXBvbmVudCkgYnV0dG9uc1F1ZXJ5TGlzdDogUXVlcnlMaXN0PEJ1dHRvblRvZ2dsZUNvbXBvbmVudD47XG5cbiAgQE91dHB1dCgnb25DaGFuZ2UnKSBvbkNoYW5nZUVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxzdHJpbmc+O1xuXG4gIEBJbnB1dCgpIGNhblVuY2hlY2s6IGJvb2xlYW4gPSBCdXR0b25Ub2dnbGVHcm91cENvbXBvbmVudC5kZWZhdWx0UHJvcHMuY2FuVW5jaGVjaztcbiAgQElucHV0KCkgY2xhc3NOYW1lOiBzdHJpbmcgPSBCdXR0b25Ub2dnbGVHcm91cENvbXBvbmVudC5kZWZhdWx0UHJvcHMuY2xhc3NOYW1lO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IEJ1dHRvblRvZ2dsZUdyb3VwQ29tcG9uZW50LmRlZmF1bHRQcm9wcy5kaXNhYmxlZDtcbiAgQElucHV0KCkgdmFsdWU6IHN0cmluZyA9IEJ1dHRvblRvZ2dsZUdyb3VwQ29tcG9uZW50LmRlZmF1bHRQcm9wcy52YWx1ZTtcblxuICBwdWJsaWMgcHJlZml4ID0gY29uZmlnLmNvbXBvbmVudHMucHJlZml4O1xuXG4gIHB1YmxpYyBpc0ZvY3VzZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLm9uQ2hhbmdlRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHRoaXMuaW5pdEJ1dHRvbnMgPSB0aGlzLmluaXRCdXR0b25zLmJpbmQodGhpcyk7XG4gICAgdGhpcy5yZWdpc3RlckJ1dHRvbnMgPSB0aGlzLnJlZ2lzdGVyQnV0dG9ucy5iaW5kKHRoaXMpO1xuICAgIHRoaXMudG9nZ2xlQnV0dG9uID0gdGhpcy50b2dnbGVCdXR0b24uYmluZCh0aGlzKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLmluaXRCdXR0b25zKCk7XG5cbiAgICB0aGlzLmJ1dHRvbnNRdWVyeUxpc3QuY2hhbmdlcy5zdWJzY3JpYmUodGhpcy5pbml0QnV0dG9ucyk7XG4gIH1cblxuICBpbml0QnV0dG9ucygpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucyh0aGlzLmRpc2FibGVkKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KHRoaXMucmVnaXN0ZXJCdXR0b25zLCAwKTtcbiAgfVxuXG4gIGRpc2FibGVCdXR0b25zKGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5idXR0b25zUXVlcnlMaXN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpdGVtLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgfSk7XG4gIH1cblxuICByZWdpc3RlckJ1dHRvbnMoKSB7XG4gICAgdGhpcy5idXR0b25zUXVlcnlMaXN0LmZvckVhY2goYnV0dG9uID0+IHtcbiAgICAgIGJ1dHRvbi5pc0FjdGl2ZSA9ICh0aGlzLnZhbHVlLmxhc3RJbmRleE9mKGJ1dHRvbi52YWx1ZSkgPj0gMCk7XG5cbiAgICAgIGJ1dHRvbi5vbkNsaWNrRW1pdHRlci5zdWJzY3JpYmUodGhpcy50b2dnbGVCdXR0b24pO1xuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlQnV0dG9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFZhbHVlQWxsQnV0dG9ucyh2YWx1ZSk7XG5cbiAgICBjb25zdCBjdXJyZW50QnV0dG9uID0gdGhpcy5idXR0b25zUXVlcnlMaXN0LmZpbmQoaXRlbSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZSk7XG5cbiAgICB0aGlzLnZhbHVlID0gY3VycmVudEJ1dHRvbiAmJiBjdXJyZW50QnV0dG9uLmlzQWN0aXZlXG4gICAgICA/IGN1cnJlbnRCdXR0b24udmFsdWVcbiAgICAgIDogJyc7XG5cbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG5cbiAgICB0aGlzLm9uQ2hhbmdlRW1pdHRlci5lbWl0KHRoaXMudmFsdWUpO1xuICB9XG5cbiAgc2V0VmFsdWVBbGxCdXR0b25zKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJ1dHRvbnNRdWVyeUxpc3QuZm9yRWFjaChidXR0b24gPT4ge1xuICAgICAgaWYgKGJ1dHRvbi52YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgYnV0dG9uLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChidXR0b24udmFsdWUgPT09IHZhbHVlICYmICF0aGlzLmNhblVuY2hlY2spIHtcbiAgICAgICAgYnV0dG9uLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuXG4gICAgdGhpcy5kaXNhYmxlQnV0dG9ucyh0aGlzLmRpc2FibGVkKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgb25DaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge31cblxuICBvblRvdWNoZWQoKTogdm9pZCB7fVxufVxuIl19