Newer
Older
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
import { Criterion, DatetimeCriterion } from '../../store/model';
@Component({
selector: 'app-datetime',
templateUrl: 'datetime.component.html',
changeDetection: ChangeDetectionStrategy.OnPush
})
export class DatetimeComponent {
@Input() id: number;
@Input() label: string;
@Input() placeholder: string;
@Input()
set criterion(criterion: Criterion) {
this.getDefault(criterion);
}
@Output() add: EventEmitter<DatetimeCriterion> = new EventEmitter();
hours: string[] = [];
minutes: string[] = [];
date = new FormControl('');
hh = new FormControl();
mm = new FormControl();
isValidFields = false;
datetime: Date = new Date();
constructor() {
this.hours = this.initTime(24);
this.minutes = this.initTime(60);
}
addCriterion() {
const fd = new DatetimeCriterion(this.id, this.datetime);
this.add.emit(fd);
}
getDefault(criterion: Criterion): void {
if (!criterion) {
this.date.setValue('');
this.date.enable();
this.hh.reset();
this.hh.enable();
this.mm.reset();
this.mm.enable();
this.isValidFields = false;
} else {
const c = criterion as DatetimeCriterion;
const hour = ('0' + (c.value.getHours())).slice(-2);
const minute = ('0' + (c.value.getMinutes())).slice(-2);
this.date.setValue(c.value);
this.date.disable();
this.hh.setValue(hour);
this.hh.disable();
this.mm.setValue(minute);
this.mm.disable();
this.isValidFields = true;
}
}
initTime(time: number): string[] {
const array: string[] = [];
for (let i = 0; i < time; i++) {
const t = ('0' + i).slice(-2);
array.push(t);
}
change(): void {
if (!this.date.value || !this.hh.value || !this.mm.value) {
this.isValidFields = false;
} else {
this.isValidFields = true;
this.datetime.setFullYear(
this.date.value.getFullYear(),
this.date.value.getMonth(),
this.date.value.getDate());
this.datetime.setHours(