Skip to content
Snippets Groups Projects
datetime.component.ts 2.53 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
    
    import { FormControl } from '@angular/forms';
    
    
    import { Criterion, DatetimeCriterion } from '../../store/model';
    
    @Component({
        selector: 'app-datetime',
        templateUrl: 'datetime.component.html',
    
        styleUrls: ['datetime.component.css'],
    
        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[] = [];
    
    
        hh = new FormControl();
        mm = new FormControl();
        isValidFields = false;
    
        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();
    
        initTime(time: number): string[] {
            const array: string[] = [];
            for (let i = 0; i < time; i++) {
                const t = ('0' + i).slice(-2);
                array.push(t);
    
            return array;
    
            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(
    
                    this.hh.value,
                    this.mm.value);