UNPKG

ngx-material-timepicker

Version:
223 lines 15.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { 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); } 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; } /** * * 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hdGVyaWFsLXRpbWVwaWNrZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1tYXRlcmlhbC10aW1lcGlja2VyLyIsInNvdXJjZXMiOlsic3JjL2FwcC9tYXRlcmlhbC10aW1lcGlja2VyL3NlcnZpY2VzL25neC1tYXRlcmlhbC10aW1lcGlja2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDOzs7SUFHM0IsWUFBWSxHQUFrQjtJQUNoQyxJQUFJLEVBQUUsRUFBRTtJQUNSLEtBQUssRUFBRSxHQUFHO0NBQ2I7O0lBQ0ssY0FBYyxHQUFrQjtJQUNsQyxJQUFJLEVBQUUsQ0FBQztJQUNQLEtBQUssRUFBRSxHQUFHO0NBQ2I7QUFFRDtJQUFBO1FBS1ksZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsWUFBWSxDQUFDLENBQUM7UUFDL0Qsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsY0FBYyxDQUFDLENBQUM7UUFDbkUsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBYSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7S0F3RTFFO0lBckVHLHNCQUFJLDhDQUFJOzs7OztRQUFSLFVBQVMsSUFBbUI7WUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQzs7O09BQUE7SUFFRCxzQkFBSSxzREFBWTs7OztRQUFoQjtZQUNJLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztR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LENBQUM7Ozs7O0lBRU8sZ0RBQVM7Ozs7SUFBakI7UUFDSSxJQUFJLENBQUMsSUFBSSx3QkFBTyxZQUFZLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSx3QkFBTyxjQUFjLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7SUFDaEMsQ0FBQzs7Z0JBOUVKLFVBQVUsU0FBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7Ozt1Q0FuQkQ7Q0FnR0MsQUEvRUQsSUErRUM7U0E1RVksNEJBQTRCOzs7Ozs7SUFFckMsbURBQXVFOzs7OztJQUN2RSxxREFBMkU7Ozs7O0lBQzNFLHFEQUF1RTs7Ozs7Ozs7O0FBNkUzRSxTQUFTLGtCQUFrQixDQUFDLElBQVksRUFBRSxNQUFrQjtJQUN4RCxRQUFRLE1BQU0sRUFBRTtRQUNaLEtBQUssVUFBVSxDQUFDLEVBQUU7WUFDZCxPQUFPLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2xDLEtBQUssVUFBVSxDQUFDLEVBQUU7WUFDZCxPQUFPLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN4QztZQUNJLE9BQU8sSUFBSSxDQUFDO0tBQ25CO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENsb2NrRmFjZVRpbWUgfSBmcm9tICcuLi9tb2RlbHMvY2xvY2stZmFjZS10aW1lLmludGVyZmFjZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRpbWVQZXJpb2QgfSBmcm9tICcuLi9tb2RlbHMvdGltZS1wZXJpb2QuZW51bSc7XG5pbXBvcnQgeyBUaW1lQWRhcHRlciB9IGZyb20gJy4vdGltZS1hZGFwdGVyJztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xuXG5cbmNvbnN0IERFRkFVTFRfSE9VUjogQ2xvY2tGYWNlVGltZSA9IHtcbiAgICB0aW1lOiAxMixcbiAgICBhbmdsZTogMzYwXG59O1xuY29uc3QgREVGQVVMVF9NSU5VVEU6IENsb2NrRmFjZVRpbWUgPSB7XG4gICAgdGltZTogMCxcbiAgICBhbmdsZTogMzYwXG59O1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE5neE1hdGVyaWFsVGltZXBpY2tlclNlcnZpY2Uge1xuXG4gICAgcHJpdmF0ZSBob3VyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2xvY2tGYWNlVGltZT4oREVGQVVMVF9IT1VSKTtcbiAgICBwcml2YXRlIG1pbnV0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENsb2NrRmFjZVRpbWU+KERFRkFVTFRfTUlOVVRFKTtcbiAgICBwcml2YXRlIHBlcmlvZFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRpbWVQZXJpb2Q+KFRpbWVQZXJpb2QuQU0pO1xuXG5cbiAgICBzZXQgaG91cihob3VyOiBDbG9ja0ZhY2VUaW1lKSB7XG4gICAgICAgIHRoaXMuaG91clN1YmplY3QubmV4dChob3VyKTtcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0ZWRIb3VyKCk6IE9ic2VydmFibGU8Q2xvY2tGYWNlVGltZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VyU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBzZXQgbWludXRlKG1pbnV0ZTogQ2xvY2tGYWNlVGltZSkge1xuICAgICAgICB0aGlzLm1pbnV0ZVN1YmplY3QubmV4dChtaW51dGUpO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZE1pbnV0ZSgpOiBPYnNlcnZhYmxlPENsb2NrRmFjZVRpbWU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWludXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBzZXQgcGVyaW9kKHBlcmlvZDogVGltZVBlcmlvZCkge1xuICAgICAgICBjb25zdCBpc1BlcmlvZFZhbGlkID0gKHBlcmlvZCA9PT0gVGltZVBlcmlvZC5BTSkgfHwgKHBlcmlvZCA9PT0gVGltZVBlcmlvZC5QTSk7XG5cbiAgICAgICAgaWYgKGlzUGVyaW9kVmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMucGVyaW9kU3ViamVjdC5uZXh0KHBlcmlvZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0ZWRQZXJpb2QoKTogT2JzZXJ2YWJsZTxUaW1lUGVyaW9kPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBlcmlvZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG5cbiAgICBzZXREZWZhdWx0VGltZUlmQXZhaWxhYmxlKHRpbWU6IHN0cmluZywgbWluOiBEYXRlVGltZSwgbWF4OiBEYXRlVGltZSwgZm9ybWF0OiBudW1iZXIsIG1pbnV0ZXNHYXA/OiBudW1iZXIpIHtcbiAgICAgICAgLyogV29ya2Fyb3VuZCB0byBkb3VibGUgZXJyb3IgbWVzc2FnZSovXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoVGltZUFkYXB0ZXIuaXNUaW1lQXZhaWxhYmxlKHRpbWUsIG1pbiwgbWF4LCAnbWludXRlcycsIG1pbnV0ZXNHYXApKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0VGltZShUaW1lQWRhcHRlci5mb3JtYXRUaW1lKHRpbWUsIGZvcm1hdCksIGZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRGdWxsVGltZShmb3JtYXQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGhvdXIgPSB0aGlzLmhvdXJTdWJqZWN0LmdldFZhbHVlKCkudGltZTtcbiAgICAgICAgY29uc3QgbWludXRlID0gdGhpcy5taW51dGVTdWJqZWN0LmdldFZhbHVlKCkudGltZTtcbiAgICAgICAgY29uc3QgcGVyaW9kID0gZm9ybWF0ID09PSAxMiA/IHRoaXMucGVyaW9kU3ViamVjdC5nZXRWYWx1ZSgpIDogJyc7XG5cbiAgICAgICAgcmV0dXJuIFRpbWVBZGFwdGVyLmZvcm1hdFRpbWUoYCR7aG91cn06JHttaW51dGV9ICR7cGVyaW9kfWAsIGZvcm1hdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0VGltZSh0aW1lOiBzdHJpbmcsIGZvcm1hdDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRUaW1lID0gVGltZUFkYXB0ZXIuY29udmVydFRpbWVUb0RhdGVUaW1lKHRpbWUsIGZvcm1hdCkudG9KU0RhdGUoKTtcblxuICAgICAgICBpZiAoRGF0ZVRpbWUuZnJvbUpTRGF0ZShkZWZhdWx0VGltZSkuaXNWYWxpZCkge1xuICAgICAgICAgICAgY29uc3QgcGVyaW9kID0gdGltZS5zdWJzdHIodGltZS5sZW5ndGggLSAyKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgY29uc3QgaG91ciA9IGRlZmF1bHRUaW1lLmdldEhvdXJzKCk7XG5cbiAgICAgICAgICAgIHRoaXMuaG91ciA9IHsuLi5ERUZBVUxUX0hPVVIsIHRpbWU6IGZvcm1hdEhvdXJCeVBlcmlvZChob3VyLCBwZXJpb2QgYXMgVGltZVBlcmlvZCl9O1xuICAgICAgICAgICAgdGhpcy5taW51dGUgPSB7Li4uREVGQVVMVF9NSU5VVEUsIHRpbWU6IGRlZmF1bHRUaW1lLmdldE1pbnV0ZXMoKX07XG4gICAgICAgICAgICB0aGlzLnBlcmlvZCA9IHBlcmlvZCBhcyBUaW1lUGVyaW9kO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0VGltZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldFRpbWUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaG91ciA9IHsuLi5ERUZBVUxUX0hPVVJ9O1xuICAgICAgICB0aGlzLm1pbnV0ZSA9IHsuLi5ERUZBVUxUX01JTlVURX07XG4gICAgICAgIHRoaXMucGVyaW9kID0gVGltZVBlcmlvZC5BTTtcbiAgICB9XG59XG5cbi8qKipcbiAqICBGb3JtYXQgaG91ciBpbiAyNGhvdXJzIGZvcm1hdCB0byBtZXJpZGlhbiAoQU0gb3IgUE0pIGZvcm1hdFxuICovXG5mdW5jdGlvbiBmb3JtYXRIb3VyQnlQZXJpb2QoaG91cjogbnVtYmVyLCBwZXJpb2Q6IFRpbWVQZXJpb2QpOiBudW1iZXIge1xuICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgIGNhc2UgVGltZVBlcmlvZC5BTTpcbiAgICAgICAgICAgIHJldHVybiBob3VyID09PSAwID8gMTIgOiBob3VyO1xuICAgICAgICBjYXNlIFRpbWVQZXJpb2QuUE06XG4gICAgICAgICAgICByZXR1cm4gaG91ciA9PT0gMTIgPyAxMiA6IGhvdXIgLSAxMjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgIH1cbn1cbiJdfQ==