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 { }