ngx-material-timepicker
Version:
Handy material design timepicker for angular
137 lines • 16.6 kB
JavaScript
import * as tslib_1 from "tslib";
/* tslint:disable:triple-equals */
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { TimeUnit } from '../../models/time-unit.enum';
import { TimeFormatterPipe } from '../../pipes/time-formatter.pipe';
import { isDigit } from '../../utils/timepicker.utils';
var NgxMaterialTimepickerDialControlComponent = /** @class */ (function () {
function NgxMaterialTimepickerDialControlComponent() {
this.timeUnitChanged = new EventEmitter();
this.timeChanged = new EventEmitter();
this.focused = new EventEmitter();
this.unfocused = new EventEmitter();
}
Object.defineProperty(NgxMaterialTimepickerDialControlComponent.prototype, "selectedTime", {
get: function () {
var _this = this;
if (!!this.time) {
return this.timeList.find(function (t) { return t.time === +_this.time; });
}
},
enumerable: true,
configurable: true
});
NgxMaterialTimepickerDialControlComponent.prototype.ngOnChanges = function (changes) {
if (changes['time'] && (changes['time'].currentValue !== undefined)) {
if (this.isEditable && !changes['time'].firstChange) {
return;
}
this.time = new TimeFormatterPipe().transform(+changes['time'].currentValue, this.timeUnit);
}
};
NgxMaterialTimepickerDialControlComponent.prototype.saveTimeAndChangeTimeUnit = function (event, unit) {
event.preventDefault();
this.previousTime = this.time;
this.timeUnitChanged.next(unit);
this.focused.next();
};
NgxMaterialTimepickerDialControlComponent.prototype.updateTime = function () {
var time = this.selectedTime;
if (time) {
this.timeChanged.next(time);
this.previousTime = time.time;
}
};
NgxMaterialTimepickerDialControlComponent.prototype.formatTime = function () {
if (this.isEditable) {
var time = this.time || this.previousTime;
this.time = new TimeFormatterPipe().transform(+time, this.timeUnit);
this.unfocused.next();
}
};
NgxMaterialTimepickerDialControlComponent.prototype.onKeyDown = function (e) {
var char = String.fromCharCode(e.keyCode);
if ((!isDigit(e)) || isTimeDisabledToChange(this.time, char, this.timeList)) {
e.preventDefault();
}
if (isDigit(e)) {
this.changeTimeByArrow(e.keyCode);
}
};
NgxMaterialTimepickerDialControlComponent.prototype.changeTimeByArrow = function (keyCode) {
var ARROW_UP = 38;
var ARROW_DOWN = 40;
var time;
if (keyCode === ARROW_UP) {
time = String(+this.time + (this.minutesGap || 1));
}
else if (keyCode === ARROW_DOWN) {
time = String(+this.time - (this.minutesGap || 1));
}
if (!isTimeUnavailable(time, this.timeList)) {
this.time = time;
this.updateTime();
}
};
tslib_1.__decorate([
Input(),
tslib_1.__metadata("design:type", Array)
], NgxMaterialTimepickerDialControlComponent.prototype, "timeList", void 0);
tslib_1.__decorate([
Input(),
tslib_1.__metadata("design:type", Number)
], NgxMaterialTimepickerDialControlComponent.prototype, "timeUnit", void 0);
tslib_1.__decorate([
Input(),
tslib_1.__metadata("design:type", String)
], NgxMaterialTimepickerDialControlComponent.prototype, "time", void 0);
tslib_1.__decorate([
Input(),
tslib_1.__metadata("design:type", Boolean)
], NgxMaterialTimepickerDialControlComponent.prototype, "isActive", void 0);
tslib_1.__decorate([
Input(),
tslib_1.__metadata("design:type", Boolean)
], NgxMaterialTimepickerDialControlComponent.prototype, "isEditable", void 0);
tslib_1.__decorate([
Input(),
tslib_1.__metadata("design:type", Number)
], NgxMaterialTimepickerDialControlComponent.prototype, "minutesGap", void 0);
tslib_1.__decorate([
Output(),
tslib_1.__metadata("design:type", Object)
], NgxMaterialTimepickerDialControlComponent.prototype, "timeUnitChanged", void 0);
tslib_1.__decorate([
Output(),
tslib_1.__metadata("design:type", Object)
], NgxMaterialTimepickerDialControlComponent.prototype, "timeChanged", void 0);
tslib_1.__decorate([
Output(),
tslib_1.__metadata("design:type", Object)
], NgxMaterialTimepickerDialControlComponent.prototype, "focused", void 0);
tslib_1.__decorate([
Output(),
tslib_1.__metadata("design:type", Object)
], NgxMaterialTimepickerDialControlComponent.prototype, "unfocused", void 0);
NgxMaterialTimepickerDialControlComponent = tslib_1.__decorate([
Component({
selector: 'ngx-material-timepicker-dial-control',
template: "<!--suppress HtmlFormInputWithoutLabel -->\n<input class=\"timepicker-dial__control timepicker-dial__item\"\n [ngClass]=\"{'timepicker-dial__item_active': isActive, 'timepicker-dial__control_editable': isEditable}\"\n [(ngModel)]=\"time\" (input)=\"updateTime()\" (focus)=\"saveTimeAndChangeTimeUnit($event, timeUnit)\"\n (blur)=\"formatTime()\" [readonly]=\"!isEditable\" [timepickerAutofocus]=\"isActive\" (keydown)=\"onKeyDown($event)\">\n",
styles: [".timepicker-dial__item{cursor:pointer;color:rgba(255,255,255,.5);font-family:Roboto,sans-serif}@supports (font-family:var(--primary-font-family)){.timepicker-dial__item{font-family:var(--primary-font-family);color:var(--dial-inactive-color)}}.timepicker-dial__item_active{color:#fff}@supports (color:var(--dial-active-color)){.timepicker-dial__item_active{color:var(--dial-active-color)}}.timepicker-dial__control{border:none;background-color:transparent;font-size:50px;width:60px;padding:0;border-radius:3px}.timepicker-dial__control_editable:focus{color:#00bfff;background-color:#fff;outline:#00bfff}"]
})
], NgxMaterialTimepickerDialControlComponent);
return NgxMaterialTimepickerDialControlComponent;
}());
export { NgxMaterialTimepickerDialControlComponent };
function isTimeDisabledToChange(currentTime, nextTime, timeList) {
var isNumber = /\d/.test(nextTime);
if (isNumber) {
var time = currentTime + nextTime;
return isTimeUnavailable(time, timeList);
}
}
function isTimeUnavailable(time, timeList) {
var selectedTime = timeList.find(function (value) { return value.time === +time; });
return !selectedTime || (selectedTime && selectedTime.disabled);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hdGVyaWFsLXRpbWVwaWNrZXItZGlhbC1jb250cm9sLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1tYXRlcmlhbC10aW1lcGlja2VyLyIsInNvdXJjZXMiOlsic3JjL2FwcC9tYXRlcmlhbC10aW1lcGlja2VyL2NvbXBvbmVudHMvdGltZXBpY2tlci1kaWFsLWNvbnRyb2wvbmd4LW1hdGVyaWFsLXRpbWVwaWNrZXItZGlhbC1jb250cm9sLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsa0NBQWtDO0FBQ2xDLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRWpHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFPdkQ7SUFMQTtRQWdCYyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFDL0MsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUNoRCxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNuQyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQXNFbkQsQ0FBQztJQXBFRyxzQkFBWSxtRUFBWTthQUF4QjtZQUFBLGlCQUlDO1lBSEcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDYixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUksQ0FBQyxJQUFJLEVBQXJCLENBQXFCLENBQUMsQ0FBQzthQUN6RDtRQUNMLENBQUM7OztPQUFBO0lBRUQsK0RBQVcsR0FBWCxVQUFZLE9BQXNC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LFlBQVksSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDcEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIHRzbGludDpkaXNhYmxlOnRyaXBsZS1lcXVhbHMgKi9cbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENsb2NrRmFjZVRpbWUgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2xvY2stZmFjZS10aW1lLmludGVyZmFjZSc7XG5pbXBvcnQgeyBUaW1lVW5pdCB9IGZyb20gJy4uLy4uL21vZGVscy90aW1lLXVuaXQuZW51bSc7XG5pbXBvcnQgeyBUaW1lRm9ybWF0dGVyUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3RpbWUtZm9ybWF0dGVyLnBpcGUnO1xuaW1wb3J0IHsgaXNEaWdpdCB9IGZyb20gJy4uLy4uL3V0aWxzL3RpbWVwaWNrZXIudXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1tYXRlcmlhbC10aW1lcGlja2VyLWRpYWwtY29udHJvbCcsXG4gICAgdGVtcGxhdGVVcmw6ICduZ3gtbWF0ZXJpYWwtdGltZXBpY2tlci1kaWFsLWNvbnRyb2wuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWyduZ3gtbWF0ZXJpYWwtdGltZXBpY2tlci1kaWFsLWNvbnRyb2wuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hNYXRlcmlhbFRpbWVwaWNrZXJEaWFsQ29udHJvbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG5cbiAgICBwcmV2aW91c1RpbWU6IG51bWJlciB8IHN0cmluZztcblxuICAgIEBJbnB1dCgpIHRpbWVMaXN0OiBDbG9ja0ZhY2VUaW1lW107XG4gICAgQElucHV0KCkgdGltZVVuaXQ6IFRpbWVVbml0O1xuICAgIEBJbnB1dCgpIHRpbWU6IHN0cmluZztcbiAgICBASW5wdXQoKSBpc0FjdGl2ZTogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpc0VkaXRhYmxlOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIG1pbnV0ZXNHYXA6IG51bWJlcjtcblxuICAgIEBPdXRwdXQoKSB0aW1lVW5pdENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFRpbWVVbml0PigpO1xuICAgIEBPdXRwdXQoKSB0aW1lQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2xvY2tGYWNlVGltZT4oKTtcbiAgICBAT3V0cHV0KCkgZm9jdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVsbD4oKTtcbiAgICBAT3V0cHV0KCkgdW5mb2N1c2VkID0gbmV3IEV2ZW50RW1pdHRlcjxudWxsPigpO1xuXG4gICAgcHJpdmF0ZSBnZXQgc2VsZWN0ZWRUaW1lKCk6IENsb2NrRmFjZVRpbWUge1xuICAgICAgICBpZiAoISF0aGlzLnRpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbWVMaXN0LmZpbmQodCA9PiB0LnRpbWUgPT09ICt0aGlzLnRpbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlc1sndGltZSddICYmIChjaGFuZ2VzWyd0aW1lJ10uY3VycmVudFZhbHVlICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VkaXRhYmxlICYmICFjaGFuZ2VzWyd0aW1lJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRpbWUgPSBuZXcgVGltZUZvcm1hdHRlclBpcGUoKS50cmFuc2Zvcm0oK2NoYW5nZXNbJ3RpbWUnXS5jdXJyZW50VmFsdWUsIHRoaXMudGltZVVuaXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2F2ZVRpbWVBbmRDaGFuZ2VUaW1lVW5pdChldmVudDogRm9jdXNFdmVudCwgdW5pdDogVGltZVVuaXQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5wcmV2aW91c1RpbWUgPSB0aGlzLnRpbWU7XG4gICAgICAgIHRoaXMudGltZVVuaXRDaGFuZ2VkLm5leHQodW5pdCk7XG4gICAgICAgIHRoaXMuZm9jdXNlZC5uZXh0KCk7XG4gICAgfVxuXG4gICAgdXBkYXRlVGltZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGltZSA9IHRoaXMuc2VsZWN0ZWRUaW1lO1xuICAgICAgICBpZiAodGltZSkge1xuICAgICAgICAgICAgdGhpcy50aW1lQ2hhbmdlZC5uZXh0KHRpbWUpO1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c1RpbWUgPSB0aW1lLnRpbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3JtYXRUaW1lKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0VkaXRhYmxlKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lID0gdGhpcy50aW1lIHx8IHRoaXMucHJldmlvdXNUaW1lO1xuICAgICAgICAgICAgdGhpcy50aW1lID0gbmV3IFRpbWVGb3JtYXR0ZXJQaXBlKCkudHJhbnNmb3JtKCt0aW1lLCB0aGlzLnRpbWVVbml0KTtcbiAgICAgICAgICAgIHRoaXMudW5mb2N1c2VkLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uS2V5RG93bihlOiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUua2V5Q29kZSk7XG5cblxuICAgICAgICBpZiAoKCFpc0RpZ2l0KGUpKSB8fCBpc1RpbWVEaXNhYmxlZFRvQ2hhbmdlKHRoaXMudGltZSwgY2hhciwgdGhpcy50aW1lTGlzdCkpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0RpZ2l0KGUpKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVRpbWVCeUFycm93KGUua2V5Q29kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZVRpbWVCeUFycm93KGtleUNvZGU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBBUlJPV19VUCA9IDM4O1xuICAgICAgICBjb25zdCBBUlJPV19ET1dOID0gNDA7XG4gICAgICAgIGxldCB0aW1lOiBzdHJpbmc7XG5cbiAgICAgICAgaWYgKGtleUNvZGUgPT09IEFSUk9XX1VQKSB7XG4gICAgICAgICAgICB0aW1lID0gU3RyaW5nKCt0aGlzLnRpbWUgKyAodGhpcy5taW51dGVzR2FwIHx8IDEpKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXlDb2RlID09PSBBUlJPV19ET1dOKSB7XG4gICAgICAgICAgICB0aW1lID0gU3RyaW5nKCt0aGlzLnRpbWUgLSAodGhpcy5taW51dGVzR2FwIHx8IDEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNUaW1lVW5hdmFpbGFibGUodGltZSwgdGhpcy50aW1lTGlzdCkpIHtcbiAgICAgICAgICAgIHRoaXMudGltZSA9IHRpbWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRpbWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5cbmZ1bmN0aW9uIGlzVGltZURpc2FibGVkVG9DaGFuZ2UoY3VycmVudFRpbWU6IHN0cmluZywgbmV4dFRpbWU6IHN0cmluZywgdGltZUxpc3Q6IENsb2NrRmFjZVRpbWVbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlzTnVtYmVyID0gL1xcZC8udGVzdChuZXh0VGltZSk7XG5cbiAgICBpZiAoaXNOdW1iZXIpIHtcbiAgICAgICAgY29uc3QgdGltZSA9IGN1cnJlbnRUaW1lICsgbmV4dFRpbWU7XG4gICAgICAgIHJldHVybiBpc1RpbWVVbmF2YWlsYWJsZSh0aW1lLCB0aW1lTGlzdCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc1RpbWVVbmF2YWlsYWJsZSh0aW1lOiBzdHJpbmcsIHRpbWVMaXN0OiBDbG9ja0ZhY2VUaW1lW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWxlY3RlZFRpbWUgPSB0aW1lTGlzdC5maW5kKHZhbHVlID0+IHZhbHVlLnRpbWUgPT09ICt0aW1lKTtcbiAgICByZXR1cm4gIXNlbGVjdGVkVGltZSB8fCAoc2VsZWN0ZWRUaW1lICYmIHNlbGVjdGVkVGltZS5kaXNhYmxlZCk7XG59XG4iXX0=