@rishavtandon93/ng-select-aria
Version:
Angular ng-select - All in One UI Select, Multiselect and Autocomplete
64 lines (53 loc) • 1.64 kB
text/typescript
import {
AfterViewChecked,
ChangeDetectionStrategy,
Component,
ElementRef,
Input,
OnChanges,
OnDestroy,
SimpleChanges
} from '@angular/core';
import { Subject } from 'rxjs';
export class NgOptionComponent implements OnChanges, AfterViewChecked, OnDestroy {
value: any;
get disabled() { return this._disabled; }
set disabled(value: any) { this._disabled = this._isDisabled(value) }
readonly stateChange$ = new Subject<{ value: any, disabled: boolean, label?: string }>();
private _disabled = false;
private _previousLabel: string;
constructor(public elementRef: ElementRef<HTMLElement>) { }
get label(): string {
return (this.elementRef.nativeElement.textContent || '').trim();
}
ngOnChanges(changes: SimpleChanges) {
if (changes.disabled) {
this.stateChange$.next({
value: this.value,
disabled: this._disabled
});
}
}
ngAfterViewChecked() {
if (this.label !== this._previousLabel) {
this._previousLabel = this.label;
this.stateChange$.next({
value: this.value,
disabled: this._disabled,
label: this.elementRef.nativeElement.innerHTML
});
}
}
ngOnDestroy() {
this.stateChange$.complete();
}
private _isDisabled(value) {
return value != null && `${value}` !== 'false';
}
}