import { Component, OnInit } from '@angular/core';
import { ViewChild, Injector, Input, Output, EventEmitter, forwardRef } from '@angular/core';
import { appModuleAnimation } from '@shared/animations/routerTransition';
import { NG_VALUE_ACCESSOR, ControlValueAccessor, FormControl } from '@angular/forms';
import { AppComponentBase } from '@shared/common/app-component-base';
import * as moment from 'moment';
@Component({
selector: 'wg-datetimepicker',
template:
`<ejs-datetimepicker #WgDateTimePicker
[id]="id"
[class]="class"
[readonly]="readonly"
[showClearButton]='showClearButton'
[step]='step'
[placeholder]='placeholder'
[(ngModel)]="dateValue"
(blur)="onBlur.emit($event)"
(focus)="onFocus.emit($event)"
(open)="onOpen.emit($event)"
(close)="onClose.emit($event)"
(change)="onChange($event)">
</ejs-datetimepicker>`
,
providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => WgDateTimePickerComponent),
multi: true
}],
animations: [appModuleAnimation()]
})
export class WgDateTimePickerComponent extends AppComponentBase implements OnInit, ControlValueAccessor {
@ViewChild('WgDateTimePicker', {static: false}) dateTimePicker;
dateValue: Date = null;
@Input() formControl: FormControl;
@Input() id = '';
@Input() tindex = '';
@Input() readonly = false;
@Input() showClearButton = false;
@Input() isRequired = false;
@Input() isDisabled = false;
@Input() step = 5;
@Input() class = '';
@Input() style = '';
@Input() placeholder = '';
@Input() defaultDate: moment.Moment = null;
@Input() value: moment.Moment;
// Event names changed to avoid conflict.
@Output() valueChange: EventEmitter<any> = new EventEmitter<any>();
@Output() onBlur: EventEmitter<any> = new EventEmitter<any>();
@Output() onFocus: EventEmitter<any> = new EventEmitter<any>();
@Output() onOpen: EventEmitter<any> = new EventEmitter<any>();
@Output() onClose: EventEmitter<any> = new EventEmitter<any>();
propagateChange: any = () => { };
constructor(injector: Injector) {
super(injector);
}
ngOnInit(): void {
if (this.defaultDate != null && this.value === null) {
this.value = this.defaultDate;
this.propagateChange(this.value);
}
this.setValue(this.value);
}
setValue(value: any) {
// Set the Moment value.
this.value = value === undefined || value === null ? null : moment(value);
// Set the Date value.
this.dateValue = this.value === null ? null : this.toDate(this.value);
}
writeValue(obj: any): void {
this.setValue(obj);
}
registerOnChange(fn: any): void {
this.propagateChange = fn;
}
registerOnTouched(fn: any): void { }
setDisabledState?(isDisabled: boolean): void {
this.isDisabled = isDisabled;
}
onChange(event: any) {
this.setValue(event.value);
// Push the Moment value.
this.propagateChange(this.value);
this.valueChange.emit(this.value);
}
toDate(date: any): Date {
var newDate = moment(date);
return new Date(newDate.year(), newDate.month(), newDate.date(), newDate.hour(), newDate.minute());
}
}