import {
Component, Input, Output, EventEmitter, HostBinding, forwardRef
} from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
import './toggle.scss';
const TOGGLE_VALUE_ACCESSOR: any = {
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => ToggleComponent),
multi: true
};
let nextId = 0;
@Component({
selector: 'swui-toggle',
template: `
`,
providers: [TOGGLE_VALUE_ACCESSOR]
})
export class ToggleComponent implements ControlValueAccessor {
@Input() id: string = `input-${++nextId}`;
@Input() name: string = null;
@Input() disabled: boolean = false;
@Input() required: boolean = false;
@Input() tabIndex: number = 0;
@Input() label: string;
get value(): boolean {
return this._value;
}
set value(value) {
if (this.value !== value) {
this._value = value;
this.onChangeCallback(this._value);
}
}
@Output() change = new EventEmitter();
@HostBinding('class')
private get getHostCssClasses(): string {
return 'swui-toggle';
}
@HostBinding('class.disabled')
private get getDisabled(): string {
return this.disabled ? 'disabled' : '';
}
private _value: boolean = false;
toggle(): void {
this.value = !this.value;
}
onBlur(event): void {
this.onTouchedCallback();
}
onChange(event): void {
this.toggle();
}
writeValue(value: any): void {
this.value = value;
}
registerOnChange(fn: any): void {
this.onChangeCallback = fn;
}
registerOnTouched(fn: any): void {
this.onTouchedCallback = fn;
}
private onTouchedCallback = () => {
// placeholder
}
private onChangeCallback = (_: any) => {
// placeholder
}
}