UNPKG

nts-ng2-components

Version:

Paquete de componentes para Angular2 desarrollado por NITSNETS.

84 lines (73 loc) 2.75 kB
import { Component, EventEmitter, Input, OnChanges, Output } from '@angular/core'; @Component({ selector: 'nts-clock', templateUrl: 'clock.component.html', styleUrls: ['clock.component.scss'], }) export class NtsClockComponent implements OnChanges { @Input() ntsModel; @Output() ntsModelChange = new EventEmitter(); mode: String; hoursModes = { AM: ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11'], PM: ['12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23'] }; hours: String[] = this.hoursModes['AM']; minutes: String[] = ['00', '05', '10', '15', '20', '25', '30', '35', '40', '45', '50', '55']; hour: number; hourIndex: number; hourDegrees: number; minute: number; minuteIndex: number; minuteDegrees: number; constructor() { this.initValue(); } ngOnChanges(changes) { if (this.ntsModel) { this.updateValue(); } else { this.initValue(); } } selectMode(mode) { this.setMode(mode); this.applyValue(); } selectHour(hour) { this.hourIndex = hour; this.apply(); } selectMinute(minute) { this.minuteIndex = minute; this.apply(); } private setMode(mode) { this.mode = mode; this.hours = this.hoursModes[mode]; } private apply() { this.applyValue(); this.applyDegrees(); } private applyDegrees() { this.minuteDegrees = 6 * this.minute; this.hourDegrees = 30 * (this.hour % 12) + this.minuteDegrees / 12; } private applyValue() { let hourStr = this.hours[this.hourIndex]; let minuteStr = this.minutes[this.minuteIndex]; this.hour = +hourStr; this.minute = +minuteStr; this.ntsModelChange.emit(hourStr + ':' + minuteStr); } private updateValue() { // Get hour and minute string from input hh:mm let timeSplitted = this.ntsModel.split(':'); let hour = timeSplitted[0]; let minute = timeSplitted[1]; // Set the clock hours and minutes as integers this.hour = +hour; this.minute = +minute; // Set the right mode if (+hour > 11) { this.setMode('PM'); } else { this.setMode('AM'); } // Set the clock indexes to highlight the numbers this.hourIndex = this.hours.indexOf(hour); this.minuteIndex = this.minutes.indexOf(minute); this.applyDegrees(); } private initValue() { this.setMode('AM'); this.hour = 0; this.hourIndex = 0; this.hourDegrees = 0; this.minute = 0; this.minuteIndex = 0; this.minuteDegrees = 0; } }