import {NgModule,Component,Input,Output,EventEmitter,forwardRef,ChangeDetectionStrategy,ChangeDetectorRef} from '@angular/core';
import {CommonModule} from '@angular/common';
import {RippleModule} from 'mirra-ui/ripple';
import {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';
export const TOGGLEBUTTON_VALUE_ACCESSOR: any = {
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => ToggleButton),
multi: true
};
@Component({
selector: 'p-toggleButton',
template: `
{{checked ? hasOnLabel ? onLabel : '' : hasOffLabel ? offLabel : ''}}
`,
providers: [TOGGLEBUTTON_VALUE_ACCESSOR],
changeDetection: ChangeDetectionStrategy.OnPush,
styleUrls: ['../button/button.scss']
})
export class ToggleButton implements ControlValueAccessor {
@Input() onLabel: string;
@Input() offLabel: string;
@Input() onIcon: string;
@Input() offIcon: string;
@Input() ariaLabelledBy: string;
@Input() disabled: boolean;
@Input() style: any;
@Input() styleClass: string;
@Input() inputId: string;
@Input() tabindex: number;
@Input() iconPos: string = 'left';
@Output() onChange: EventEmitter = new EventEmitter();
checked: boolean = false;
onModelChange: Function = () => {};
onModelTouched: Function = () => {};
constructor(private cd: ChangeDetectorRef) { }
toggle(event: Event) {
if (!this.disabled) {
this.checked = !this.checked;
this.onModelChange(this.checked);
this.onModelTouched();
this.onChange.emit({
originalEvent: event,
checked: this.checked
});
this.cd.markForCheck();
}
}
onBlur() {
this.onModelTouched();
}
writeValue(value: any) : void {
this.checked = value;
this.cd.markForCheck();
}
registerOnChange(fn: Function): void {
this.onModelChange = fn;
}
registerOnTouched(fn: Function): void {
this.onModelTouched = fn;
}
setDisabledState(val: boolean): void {
this.disabled = val;
}
get hasOnLabel():boolean {
return this.onLabel && this.onLabel.length > 0;
}
get hasOffLabel():boolean {
return this.onLabel && this.onLabel.length > 0;
}
}
@NgModule({
imports: [CommonModule,RippleModule],
exports: [ToggleButton],
declarations: [ToggleButton]
})
export class ToggleButtonModule { }