ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
211 lines (210 loc) • 15.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Directive, Input, Output, EventEmitter, HostListener, ViewContainerRef, ElementRef, Injector, ComponentFactoryResolver } from '@angular/core';
import { DatePickerComponent } from './date-picker.component';
import { DatePickerOptions } from './date-picker-options.provider';
export class DatePickerDirective {
/**
* @param {?} _viewContainerRef
* @param {?} _elm
* @param {?} _defaultOptions
* @param {?} _cfr
*/
constructor(_viewContainerRef, _elm, _defaultOptions, _cfr) {
this._viewContainerRef = _viewContainerRef;
this._elm = _elm;
this._defaultOptions = _defaultOptions;
this._cfr = _cfr;
this._eventListeners = [];
this.value = new Date();
this.onVisibleChange = new EventEmitter(true);
this.onValueChange = new EventEmitter();
this.onOk = new EventEmitter();
this.onDismiss = new EventEmitter();
}
/**
* @return {?}
*/
togglePicker() {
if (!this.picker) {
this.showPicker();
}
else {
this.hidePicker();
}
}
/**
* @return {?}
*/
showPicker() {
if (!this.picker) {
setTimeout(() => {
this._eventListeners = [];
});
/** @type {?} */
const options = new DatePickerOptions();
Object.assign(options, this._defaultOptions, {
hidePicker: (event) => {
this.hidePicker();
}
});
/** @type {?} */
const optionalParams = [
'mode',
'minDate',
'maxDate',
'value',
'mask',
'title',
'okText',
'dismissText',
'disabled',
'locale',
'appendToBody',
'onOk',
'onDismiss',
'onValueChange'
];
optionalParams.forEach(param => {
if (typeof this[param] !== 'undefined') {
(/** @type {?} */ (options))[param] = this[param];
}
});
/** @type {?} */
const componentFactory = this._cfr.resolveComponentFactory(DatePickerComponent);
/** @type {?} */
const childInjector = Injector.create([
{
provide: DatePickerOptions,
useValue: options
}
]);
this.picker = this._viewContainerRef.createComponent(componentFactory, this._viewContainerRef.length, childInjector);
if (options.appendToBody) {
document.body.appendChild(this.picker.location.nativeElement);
}
this.onVisibleChange.emit(true);
}
}
/**
* @return {?}
*/
hidePicker() {
if (this.picker) {
this.picker.destroy();
delete this.picker;
this.onVisibleChange.emit(false);
this._eventListeners.forEach(fn => fn());
this._eventListeners = [];
}
}
/**
* @return {?}
*/
ngOnInit() {
this.onVisibleChange.emit(false);
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
if (changes["isOpen"]) {
if (changes["isOpen"].currentValue === true) {
this.showPicker();
}
else {
this.hidePicker();
}
}
}
/**
* @return {?}
*/
ngOnDestroy() {
this.hidePicker();
}
}
DatePickerDirective.decorators = [
{ type: Directive, args: [{
selector: '[DatePicker]'
},] }
];
/** @nocollapse */
DatePickerDirective.ctorParameters = () => [
{ type: ViewContainerRef },
{ type: ElementRef },
{ type: DatePickerOptions },
{ type: ComponentFactoryResolver }
];
DatePickerDirective.propDecorators = {
isOpen: [{ type: Input }],
mode: [{ type: Input }],
minDate: [{ type: Input }],
maxDate: [{ type: Input }],
use12Hours: [{ type: Input }],
value: [{ type: Input }],
mask: [{ type: Input }],
title: [{ type: Input }],
okText: [{ type: Input }],
dismissText: [{ type: Input }],
disabled: [{ type: Input }],
locale: [{ type: Input }],
appendToBody: [{ type: Input }],
onVisibleChange: [{ type: Output }],
onValueChange: [{ type: Output }],
onOk: [{ type: Output }],
onDismiss: [{ type: Output }],
togglePicker: [{ type: HostListener, args: ['click',] }]
};
if (false) {
/** @type {?} */
DatePickerDirective.prototype.picker;
/** @type {?} */
DatePickerDirective.prototype._eventListeners;
/** @type {?} */
DatePickerDirective.prototype.isOpen;
/** @type {?} */
DatePickerDirective.prototype.mode;
/** @type {?} */
DatePickerDirective.prototype.minDate;
/** @type {?} */
DatePickerDirective.prototype.maxDate;
/** @type {?} */
DatePickerDirective.prototype.use12Hours;
/** @type {?} */
DatePickerDirective.prototype.value;
/** @type {?} */
DatePickerDirective.prototype.mask;
/** @type {?} */
DatePickerDirective.prototype.title;
/** @type {?} */
DatePickerDirective.prototype.okText;
/** @type {?} */
DatePickerDirective.prototype.dismissText;
/** @type {?} */
DatePickerDirective.prototype.disabled;
/** @type {?} */
DatePickerDirective.prototype.locale;
/** @type {?} */
DatePickerDirective.prototype.appendToBody;
/** @type {?} */
DatePickerDirective.prototype.onVisibleChange;
/** @type {?} */
DatePickerDirective.prototype.onValueChange;
/** @type {?} */
DatePickerDirective.prototype.onOk;
/** @type {?} */
DatePickerDirective.prototype.onDismiss;
/** @type {?} */
DatePickerDirective.prototype._viewContainerRef;
/** @type {?} */
DatePickerDirective.prototype._elm;
/** @type {?} */
DatePickerDirective.prototype._defaultOptions;
/** @type {?} */
DatePickerDirective.prototype._cfr;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvIiwic291cmNlcyI6WyJkYXRlLXBpY2tlci9kYXRlLXBpY2tlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osWUFBWSxFQUNaLGdCQUFnQixFQUdoQixVQUFVLEVBR1YsUUFBUSxFQUNSLHdCQUF3QixFQUd6QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUtuRSxNQUFNOzs7Ozs7O0lBZ0RKLFlBQ1UsbUJBQ0EsTUFDQSxpQkFDQTtRQUhBLHNCQUFpQixHQUFqQixpQkFBaUI7UUFDakIsU0FBSSxHQUFKLElBQUk7UUFDSixvQkFBZSxHQUFmLGVBQWU7UUFDZixTQUFJLEdBQUosSUFBSTsrQkFsRCtCLEVBQUU7cUJBYWpDLElBQUksSUFBSSxFQUFFOytCQWdCaUIsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDOzZCQUU1QixJQUFJLFlBQVksRUFBRTtvQkFFM0IsSUFBSSxZQUFZLEVBQUU7eUJBRWIsSUFBSSxZQUFZLEVBQUU7S0FnQjdDOzs7O0lBYkosWUFBWTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQjthQUFNO1lBQ0wsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO0tBQ0Y7Ozs7SUFTRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQzthQUMz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QkFFTCxLQUFLO21CQUVMLEtBQUs7b0JBRUwsS0FBSztxQkFFTCxLQUFLOzBCQUVMLEtBQUs7dUJBRUwsS0FBSztxQkFFTCxLQUFLOzJCQUVMLEtBQUs7OEJBRUwsTUFBTTs0QkFFTixNQUFNO21CQUVOLE1BQU07d0JBRU4sTUFBTTsyQkFHTixZQUFZLFNBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIENvbXBvbmVudFJlZixcbiAgT25EZXN0cm95LFxuICBFbGVtZW50UmVmLFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgSW5qZWN0b3IsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgQ29tcG9uZW50RmFjdG9yeSxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlUGlja2VyT3B0aW9ucyB9IGZyb20gJy4vZGF0ZS1waWNrZXItb3B0aW9ucy5wcm92aWRlcic7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tEYXRlUGlja2VyXSdcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpY2tlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBPbkluaXQge1xuICBwaWNrZXI6IENvbXBvbmVudFJlZjxEYXRlUGlja2VyQ29tcG9uZW50PjtcbiAgcHJpdmF0ZSBfZXZlbnRMaXN0ZW5lcnM6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XG5cbiAgQElucHV0KClcbiAgaXNPcGVuOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBtb2RlOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIG1pbkRhdGU6IHN0cmluZztcbiAgQElucHV0KClcbiAgbWF4RGF0ZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICB1c2UxMkhvdXJzOiBib29sZWFuO1xuICBASW5wdXQoKVxuICB2YWx1ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIEBJbnB1dCgpXG4gIG1hc2s6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIG9rVGV4dDogc3RyaW5nO1xuICBASW5wdXQoKVxuICBkaXNtaXNzVGV4dDogc3RyaW5nO1xuICBASW5wdXQoKVxuICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgbG9jYWxlOiBhbnk7XG4gIEBJbnB1dCgpXG4gIGFwcGVuZFRvQm9keTogYm9vbGVhbjtcbiAgQE91dHB1dCgpXG4gIG9uVmlzaWJsZUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcih0cnVlKTtcbiAgQE91dHB1dCgpXG4gIG9uVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KClcbiAgb25PazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKVxuICBvbkRpc21pc3M6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgdG9nZ2xlUGlja2VyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5waWNrZXIpIHtcbiAgICAgIHRoaXMuc2hvd1BpY2tlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhpZGVQaWNrZXIoKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgX2VsbTogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9kZWZhdWx0T3B0aW9uczogRGF0ZVBpY2tlck9wdGlvbnMsXG4gICAgcHJpdmF0ZSBfY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgKSB7fVxuXG4gIHNob3dQaWNrZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBpY2tlcikge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzID0gW107XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgb3B0aW9ucyA9IG5ldyBEYXRlUGlja2VyT3B0aW9ucygpO1xuICAgICAgT2JqZWN0LmFzc2lnbihvcHRpb25zLCB0aGlzLl9kZWZhdWx0T3B0aW9ucywge1xuICAgICAgICBoaWRlUGlja2VyOiAoZXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLmhpZGVQaWNrZXIoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG9wdGlvbmFsUGFyYW1zOiBBcnJheTxrZXlvZiBEYXRlUGlja2VyRGlyZWN0aXZlPiA9IFtcbiAgICAgICAgJ21vZGUnLFxuICAgICAgICAnbWluRGF0ZScsXG4gICAgICAgICdtYXhEYXRlJyxcbiAgICAgICAgJ3ZhbHVlJyxcbiAgICAgICAgJ21hc2snLFxuICAgICAgICAndGl0bGUnLFxuICAgICAgICAnb2tUZXh0JyxcbiAgICAgICAgJ2Rpc21pc3NUZXh0JyxcbiAgICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICAgJ2xvY2FsZScsXG4gICAgICAgICdhcHBlbmRUb0JvZHknLFxuICAgICAgICAnb25PaycsXG4gICAgICAgICdvbkRpc21pc3MnLFxuICAgICAgICAnb25WYWx1ZUNoYW5nZSdcbiAgICAgIF07XG4gICAgICBvcHRpb25hbFBhcmFtcy5mb3JFYWNoKHBhcmFtID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzW3BhcmFtXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAob3B0aW9ucyBhcyBhbnkpW3BhcmFtXSA9IHRoaXNbcGFyYW1dO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8RGF0ZVBpY2tlckNvbXBvbmVudD4gPSB0aGlzLl9jZnIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoXG4gICAgICAgIERhdGVQaWNrZXJDb21wb25lbnRcbiAgICAgICk7XG4gICAgICBjb25zdCBjaGlsZEluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IERhdGVQaWNrZXJPcHRpb25zLFxuICAgICAgICAgIHVzZVZhbHVlOiBvcHRpb25zXG4gICAgICAgIH1cbiAgICAgIF0pO1xuICAgICAgdGhpcy5waWNrZXIgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChcbiAgICAgICAgY29tcG9uZW50RmFjdG9yeSxcbiAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGgsXG4gICAgICAgIGNoaWxkSW5qZWN0b3JcbiAgICAgICk7XG4gICAgICBpZiAob3B0aW9ucy5hcHBlbmRUb0JvZHkpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnBpY2tlci5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIHRoaXMub25WaXNpYmxlQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgaGlkZVBpY2tlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5waWNrZXIpIHtcbiAgICAgIHRoaXMucGlja2VyLmRlc3Ryb3koKTtcbiAgICAgIGRlbGV0ZSB0aGlzLnBpY2tlcjtcbiAgICAgIHRoaXMub25WaXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaChmbiA9PiBmbigpKTtcbiAgICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzID0gW107XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5vblZpc2libGVDaGFuZ2UuZW1pdChmYWxzZSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMuaXNPcGVuKSB7XG4gICAgICBpZiAoY2hhbmdlcy5pc09wZW4uY3VycmVudFZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuc2hvd1BpY2tlcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oaWRlUGlja2VyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5oaWRlUGlja2VyKCk7XG4gIH1cbn1cbiJdfQ==