ngx-material-timepicker-decon
Version:
Handy material design timepicker for angular DECONied
226 lines • 16.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { EventEmitter, Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { TimePeriod } from '../models/time-period.enum';
import { TimeAdapter } from './time-adapter';
import { DateTime } from 'luxon';
import * as i0 from "@angular/core";
/** @type {?} */
var DEFAULT_HOUR = {
time: 12,
angle: 360
};
/** @type {?} */
var DEFAULT_MINUTE = {
time: 0,
angle: 360
};
var NgxMaterialTimepickerService = /** @class */ (function () {
function NgxMaterialTimepickerService() {
this.hourSubject = new BehaviorSubject(DEFAULT_HOUR);
this.minuteSubject = new BehaviorSubject(DEFAULT_MINUTE);
this.periodSubject = new BehaviorSubject(TimePeriod.AM);
this.keyboardClick = new EventEmitter();
}
Object.defineProperty(NgxMaterialTimepickerService.prototype, "hour", {
set: /**
* @param {?} hour
* @return {?}
*/
function (hour) {
this.hourSubject.next(hour);
},
enumerable: true,
configurable: true
});
Object.defineProperty(NgxMaterialTimepickerService.prototype, "selectedHour", {
get: /**
* @return {?}
*/
function () {
return this.hourSubject.asObservable();
},
enumerable: true,
configurable: true
});
Object.defineProperty(NgxMaterialTimepickerService.prototype, "minute", {
set: /**
* @param {?} minute
* @return {?}
*/
function (minute) {
this.minuteSubject.next(minute);
},
enumerable: true,
configurable: true
});
Object.defineProperty(NgxMaterialTimepickerService.prototype, "selectedMinute", {
get: /**
* @return {?}
*/
function () {
return this.minuteSubject.asObservable();
},
enumerable: true,
configurable: true
});
Object.defineProperty(NgxMaterialTimepickerService.prototype, "period", {
set: /**
* @param {?} period
* @return {?}
*/
function (period) {
/** @type {?} */
var isPeriodValid = (period === TimePeriod.AM) || (period === TimePeriod.PM);
if (isPeriodValid) {
this.periodSubject.next(period);
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(NgxMaterialTimepickerService.prototype, "selectedPeriod", {
get: /**
* @return {?}
*/
function () {
return this.periodSubject.asObservable();
},
enumerable: true,
configurable: true
});
/**
* @param {?} time
* @param {?} min
* @param {?} max
* @param {?} format
* @param {?=} minutesGap
* @return {?}
*/
NgxMaterialTimepickerService.prototype.setDefaultTimeIfAvailable = /**
* @param {?} time
* @param {?} min
* @param {?} max
* @param {?} format
* @param {?=} minutesGap
* @return {?}
*/
function (time, min, max, format, minutesGap) {
/* Workaround to double error message*/
try {
if (TimeAdapter.isTimeAvailable(time, min, max, 'minutes', minutesGap)) {
this.setDefaultTime(TimeAdapter.formatTime(time, format), format);
}
}
catch (e) {
console.error(e);
}
};
/**
* @param {?} format
* @return {?}
*/
NgxMaterialTimepickerService.prototype.getFullTime = /**
* @param {?} format
* @return {?}
*/
function (format) {
/** @type {?} */
var hour = this.hourSubject.getValue().time;
/** @type {?} */
var minute = this.minuteSubject.getValue().time;
/** @type {?} */
var period = format === 12 ? this.periodSubject.getValue() : '';
return TimeAdapter.formatTime(hour + ":" + minute + " " + period, format);
};
/**
* @private
* @param {?} time
* @param {?} format
* @return {?}
*/
NgxMaterialTimepickerService.prototype.setDefaultTime = /**
* @private
* @param {?} time
* @param {?} format
* @return {?}
*/
function (time, format) {
/** @type {?} */
var defaultTime = TimeAdapter.convertTimeToDateTime(time, format).toJSDate();
if (DateTime.fromJSDate(defaultTime).isValid) {
/** @type {?} */
var period = time.substr(time.length - 2).toUpperCase();
/** @type {?} */
var hour = defaultTime.getHours();
this.hour = tslib_1.__assign({}, DEFAULT_HOUR, { time: formatHourByPeriod(hour, (/** @type {?} */ (period))) });
this.minute = tslib_1.__assign({}, DEFAULT_MINUTE, { time: defaultTime.getMinutes() });
this.period = (/** @type {?} */ (period));
}
else {
this.resetTime();
}
};
/**
* @private
* @return {?}
*/
NgxMaterialTimepickerService.prototype.resetTime = /**
* @private
* @return {?}
*/
function () {
this.hour = tslib_1.__assign({}, DEFAULT_HOUR);
this.minute = tslib_1.__assign({}, DEFAULT_MINUTE);
this.period = TimePeriod.AM;
};
NgxMaterialTimepickerService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */ NgxMaterialTimepickerService.ngInjectableDef = i0.defineInjectable({ factory: function NgxMaterialTimepickerService_Factory() { return new NgxMaterialTimepickerService(); }, token: NgxMaterialTimepickerService, providedIn: "root" });
return NgxMaterialTimepickerService;
}());
export { NgxMaterialTimepickerService };
if (false) {
/**
* @type {?}
* @private
*/
NgxMaterialTimepickerService.prototype.hourSubject;
/**
* @type {?}
* @private
*/
NgxMaterialTimepickerService.prototype.minuteSubject;
/**
* @type {?}
* @private
*/
NgxMaterialTimepickerService.prototype.periodSubject;
/** @type {?} */
NgxMaterialTimepickerService.prototype.keyboardClick;
}
/**
*
* Format hour in 24hours format to meridian (AM or PM) format
* @param {?} hour
* @param {?} period
* @return {?}
*/
function formatHourByPeriod(hour, period) {
switch (period) {
case TimePeriod.AM:
return hour === 0 ? 12 : hour;
case TimePeriod.PM:
return hour === 12 ? 12 : hour - 12;
default:
return hour;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hdGVyaWFsLXRpbWVwaWNrZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1tYXRlcmlhbC10aW1lcGlja2VyLWRlY29uLyIsInNvdXJjZXMiOlsic3JjL2FwcC9tYXRlcmlhbC10aW1lcGlja2VyL3NlcnZpY2VzL25neC1tYXRlcmlhbC10aW1lcGlja2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQzs7O0lBRzNCLFlBQVksR0FBa0I7SUFDaEMsSUFBSSxFQUFFLEVBQUU7SUFDUixLQUFLLEVBQUUsR0FBRztDQUNiOztJQUNLLGNBQWMsR0FBa0I7SUFDbEMsSUFBSSxFQUFFLENBQUM7SUFDUCxLQUFLLEVBQUUsR0FBRztDQUNiO0FBRUQ7SUFBQTtRQUtZLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQWdCLFlBQVksQ0FBQyxDQUFDO1FBQy9ELGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQWdCLGNBQWMsQ0FBQyxDQUFDO1FBQ25FLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQWEsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7S0F1RTVEO0lBckVHLHNCQUFJLDhDQUFJOzs7OztRQUFSLFVBQVMsSUFBbUI7WUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQzs7O09BQUE7SUFFRCxzQkFBSSxzREFBWTs7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QUM7U0FFdEM7YUFBTTtZQUNILElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNwQjtJQUNMLENBQUM7Ozs7O0lBRU8sZ0RBQVM7Ozs7SUFBakI7UUFDSSxJQUFJLENBQUMsSUFBSSx3QkFBTyxZQUFZLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSx3QkFBTyxjQUFjLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7SUFDaEMsQ0FBQzs7Z0JBOUVKLFVBQVUsU0FBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7Ozt1Q0FuQkQ7Q0FnR0MsQUEvRUQsSUErRUM7U0E1RVksNEJBQTRCOzs7Ozs7SUFFckMsbURBQXVFOzs7OztJQUN2RSxxREFBMkU7Ozs7O0lBQzNFLHFEQUF1RTs7SUFDdkUscURBQXlEOzs7Ozs7Ozs7QUE0RTdELFNBQVMsa0JBQWtCLENBQUMsSUFBWSxFQUFFLE1BQWtCO0lBQ3hELFFBQVEsTUFBTSxFQUFFO1FBQ1osS0FBSyxVQUFVLENBQUMsRUFBRTtZQUNkLE9BQU8sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbEMsS0FBSyxVQUFVLENBQUMsRUFBRTtZQUNkLE9BQU8sSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3hDO1lBQ0ksT0FBTyxJQUFJLENBQUM7S0FDbkI7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDbG9ja0ZhY2VUaW1lIH0gZnJvbSAnLi4vbW9kZWxzL2Nsb2NrLWZhY2UtdGltZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUaW1lUGVyaW9kIH0gZnJvbSAnLi4vbW9kZWxzL3RpbWUtcGVyaW9kLmVudW0nO1xuaW1wb3J0IHsgVGltZUFkYXB0ZXIgfSBmcm9tICcuL3RpbWUtYWRhcHRlcic7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcblxuXG5jb25zdCBERUZBVUxUX0hPVVI6IENsb2NrRmFjZVRpbWUgPSB7XG4gICAgdGltZTogMTIsXG4gICAgYW5nbGU6IDM2MFxufTtcbmNvbnN0IERFRkFVTFRfTUlOVVRFOiBDbG9ja0ZhY2VUaW1lID0ge1xuICAgIHRpbWU6IDAsXG4gICAgYW5nbGU6IDM2MFxufTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBOZ3hNYXRlcmlhbFRpbWVwaWNrZXJTZXJ2aWNlIHtcblxuICAgIHByaXZhdGUgaG91clN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENsb2NrRmFjZVRpbWU+KERFRkFVTFRfSE9VUik7XG4gICAgcHJpdmF0ZSBtaW51dGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDbG9ja0ZhY2VUaW1lPihERUZBVUxUX01JTlVURSk7XG4gICAgcHJpdmF0ZSBwZXJpb2RTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUaW1lUGVyaW9kPihUaW1lUGVyaW9kLkFNKTtcbiAgICBwdWJsaWMga2V5Ym9hcmRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcblxuICAgIHNldCBob3VyKGhvdXI6IENsb2NrRmFjZVRpbWUpIHtcbiAgICAgICAgdGhpcy5ob3VyU3ViamVjdC5uZXh0KGhvdXIpO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZEhvdXIoKTogT2JzZXJ2YWJsZTxDbG9ja0ZhY2VUaW1lPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHNldCBtaW51dGUobWludXRlOiBDbG9ja0ZhY2VUaW1lKSB7XG4gICAgICAgIHRoaXMubWludXRlU3ViamVjdC5uZXh0KG1pbnV0ZSk7XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGVkTWludXRlKCk6IE9ic2VydmFibGU8Q2xvY2tGYWNlVGltZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5taW51dGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHNldCBwZXJpb2QocGVyaW9kOiBUaW1lUGVyaW9kKSB7XG4gICAgICAgIGNvbnN0IGlzUGVyaW9kVmFsaWQgPSAocGVyaW9kID09PSBUaW1lUGVyaW9kLkFNKSB8fCAocGVyaW9kID09PSBUaW1lUGVyaW9kLlBNKTtcblxuICAgICAgICBpZiAoaXNQZXJpb2RWYWxpZCkge1xuICAgICAgICAgICAgdGhpcy5wZXJpb2RTdWJqZWN0Lm5leHQocGVyaW9kKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZFBlcmlvZCgpOiBPYnNlcnZhYmxlPFRpbWVQZXJpb2Q+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyaW9kU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cblxuICAgIHNldERlZmF1bHRUaW1lSWZBdmFpbGFibGUodGltZTogc3RyaW5nLCBtaW46IERhdGVUaW1lLCBtYXg6IERhdGVUaW1lLCBmb3JtYXQ6IG51bWJlciwgbWludXRlc0dhcD86IG51bWJlcikge1xuICAgICAgICAvKiBXb3JrYXJvdW5kIHRvIGRvdWJsZSBlcnJvciBtZXNzYWdlKi9cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChUaW1lQWRhcHRlci5pc1RpbWVBdmFpbGFibGUodGltZSwgbWluLCBtYXgsICdtaW51dGVzJywgbWludXRlc0dhcCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERlZmF1bHRUaW1lKFRpbWVBZGFwdGVyLmZvcm1hdFRpbWUodGltZSwgZm9ybWF0KSwgZm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEZ1bGxUaW1lKGZvcm1hdDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgaG91ciA9IHRoaXMuaG91clN1YmplY3QuZ2V0VmFsdWUoKS50aW1lO1xuICAgICAgICBjb25zdCBtaW51dGUgPSB0aGlzLm1pbnV0ZVN1YmplY3QuZ2V0VmFsdWUoKS50aW1lO1xuICAgICAgICBjb25zdCBwZXJpb2QgPSBmb3JtYXQgPT09IDEyID8gdGhpcy5wZXJpb2RTdWJqZWN0LmdldFZhbHVlKCkgOiAnJztcblxuICAgICAgICByZXR1cm4gVGltZUFkYXB0ZXIuZm9ybWF0VGltZShgJHtob3VyfToke21pbnV0ZX0gJHtwZXJpb2R9YCwgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERlZmF1bHRUaW1lKHRpbWU6IHN0cmluZywgZm9ybWF0OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFRpbWUgPSBUaW1lQWRhcHRlci5jb252ZXJ0VGltZVRvRGF0ZVRpbWUodGltZSwgZm9ybWF0KS50b0pTRGF0ZSgpO1xuXG4gICAgICAgIGlmIChEYXRlVGltZS5mcm9tSlNEYXRlKGRlZmF1bHRUaW1lKS5pc1ZhbGlkKSB7XG4gICAgICAgICAgICBjb25zdCBwZXJpb2QgPSB0aW1lLnN1YnN0cih0aW1lLmxlbmd0aCAtIDIpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBjb25zdCBob3VyID0gZGVmYXVsdFRpbWUuZ2V0SG91cnMoKTtcblxuICAgICAgICAgICAgdGhpcy5ob3VyID0gey4uLkRFRkFVTFRfSE9VUiwgdGltZTogZm9ybWF0SG91ckJ5UGVyaW9kKGhvdXIsIHBlcmlvZCBhcyBUaW1lUGVyaW9kKX07XG4gICAgICAgICAgICB0aGlzLm1pbnV0ZSA9IHsuLi5ERUZBVUxUX01JTlVURSwgdGltZTogZGVmYXVsdFRpbWUuZ2V0TWludXRlcygpfTtcbiAgICAgICAgICAgIHRoaXMucGVyaW9kID0gcGVyaW9kIGFzIFRpbWVQZXJpb2Q7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRUaW1lKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0VGltZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob3VyID0gey4uLkRFRkFVTFRfSE9VUn07XG4gICAgICAgIHRoaXMubWludXRlID0gey4uLkRFRkFVTFRfTUlOVVRFfTtcbiAgICAgICAgdGhpcy5wZXJpb2QgPSBUaW1lUGVyaW9kLkFNO1xuICAgIH1cbn1cblxuLyoqKlxuICogIEZvcm1hdCBob3VyIGluIDI0aG91cnMgZm9ybWF0IHRvIG1lcmlkaWFuIChBTSBvciBQTSkgZm9ybWF0XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEhvdXJCeVBlcmlvZChob3VyOiBudW1iZXIsIHBlcmlvZDogVGltZVBlcmlvZCk6IG51bWJlciB7XG4gICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgY2FzZSBUaW1lUGVyaW9kLkFNOlxuICAgICAgICAgICAgcmV0dXJuIGhvdXIgPT09IDAgPyAxMiA6IGhvdXI7XG4gICAgICAgIGNhc2UgVGltZVBlcmlvZC5QTTpcbiAgICAgICAgICAgIHJldHVybiBob3VyID09PSAxMiA/IDEyIDogaG91ciAtIDEyO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgfVxufVxuIl19