@rifansi/angular-datetime-picker
Version:
Angular Date Time Picker
89 lines (70 loc) • 2.19 kB
text/typescript
/**
* date-time-picker-trigger.directive
*/
import {
AfterContentInit,
ChangeDetectorRef,
Directive,
Input,
OnChanges,
OnDestroy,
OnInit,
SimpleChanges
} from '@angular/core';
import { OwlDateTimeComponent } from './date-time-picker.component';
import { merge, of as observableOf, Subscription } from 'rxjs';
export class OwlDateTimeTriggerDirective<T> implements OnInit, OnChanges, AfterContentInit, OnDestroy {
dtPicker: OwlDateTimeComponent<T>;
private _disabled: boolean;
get disabled(): boolean {
return this._disabled === undefined ? this.dtPicker.disabled : !!this._disabled;
}
set disabled( value: boolean ) {
this._disabled = value;
}
get owlDTTriggerDisabledClass(): boolean {
return this.disabled;
}
private stateChanges = Subscription.EMPTY;
constructor( protected changeDetector: ChangeDetectorRef ) {
}
public ngOnInit(): void {
}
public ngOnChanges( changes: SimpleChanges ) {
if (changes.datepicker) {
this.watchStateChanges();
}
}
public ngAfterContentInit() {
this.watchStateChanges();
}
public ngOnDestroy(): void {
this.stateChanges.unsubscribe();
}
public handleClickOnHost( event: Event ): void {
if (this.dtPicker) {
this.dtPicker.open();
event.stopPropagation();
}
}
private watchStateChanges(): void {
this.stateChanges.unsubscribe();
const inputDisabled = this.dtPicker && this.dtPicker.dtInput ?
this.dtPicker.dtInput.disabledChange : observableOf();
const pickerDisabled = this.dtPicker ?
this.dtPicker.disabledChange : observableOf();
this.stateChanges = merge([pickerDisabled, inputDisabled])
.subscribe(() => {
this.changeDetector.markForCheck();
});
}
}