ipsos-components
Version:
Material Design components for Angular
89 lines (76 loc) • 2.62 kB
text/typescript
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import {coerceBooleanProperty} from '@angular/cdk/coercion';
import {
AfterContentInit,
ChangeDetectionStrategy,
ChangeDetectorRef,
Component,
Input,
OnChanges,
OnDestroy,
SimpleChanges,
ViewEncapsulation,
} from '@angular/core';
import {merge} from 'rxjs/observable/merge';
import {of as observableOf} from 'rxjs/observable/of';
import {Subscription} from 'rxjs/Subscription';
import {MatDatepicker} from './datepicker';
import {MatDatepickerIntl} from './datepicker-intl';
export class MatDatepickerToggle<D> implements AfterContentInit, OnChanges, OnDestroy {
private _stateChanges = Subscription.EMPTY;
/** Datepicker instance that the button will toggle. */
datepicker: MatDatepicker<D>;
/** Whether the toggle button is disabled. */
get disabled(): boolean {
return this._disabled === undefined ? this.datepicker.disabled : !!this._disabled;
}
set disabled(value: boolean) {
this._disabled = coerceBooleanProperty(value);
}
private _disabled: boolean;
constructor(public _intl: MatDatepickerIntl, private _changeDetectorRef: ChangeDetectorRef) {}
ngOnChanges(changes: SimpleChanges) {
if (changes.datepicker) {
this._watchStateChanges();
}
}
ngOnDestroy() {
this._stateChanges.unsubscribe();
}
ngAfterContentInit() {
this._watchStateChanges();
}
_open(event: Event): void {
if (this.datepicker && !this.disabled) {
this.datepicker.open();
event.stopPropagation();
}
}
private _watchStateChanges() {
const datepickerDisabled = this.datepicker ? this.datepicker._disabledChange : observableOf();
const inputDisabled = this.datepicker && this.datepicker._datepickerInput ?
this.datepicker._datepickerInput._disabledChange : observableOf();
this._stateChanges.unsubscribe();
this._stateChanges = merge(this._intl.changes, datepickerDisabled, inputDisabled)
.subscribe(() => this._changeDetectorRef.markForCheck());
}
}