ngx-material-timepicker-decon
Version:
Handy material design timepicker for angular DECONied
161 lines • 13.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { DateTime } from 'luxon';
import { TimeFormat } from '../models/time-format.enum';
import { TimePeriod } from '../models/time-period.enum';
import { isBetween, isSameOrAfter, isSameOrBefore } from '../utils/timepicker.utils';
// @dynamic
var
// @dynamic
TimeAdapter = /** @class */ (function () {
function TimeAdapter() {
}
/**
* @param {?} time
* @param {?=} format
* @return {?}
*/
TimeAdapter.parseTime = /**
* @param {?} time
* @param {?=} format
* @return {?}
*/
function (time, format) {
if (format === void 0) { format = 12; }
if (time.indexOf(':') === -1) {
return 'Invalid time';
}
/** @type {?} */
var period = time.trim().substr(time.length - 2).toUpperCase();
/** @type {?} */
var isPeriodValid = period === TimePeriod.AM || period === TimePeriod.PM;
var _a = tslib_1.__read(time.split(':'), 2), h = _a[0], m = _a[1];
if (format === 24) {
/** @type {?} */
var formattedHours = isPeriodValid ? this.formatHour(+h, 12, (/** @type {?} */ (period))) : +h;
return formattedHours + ":" + parseInt(m, 10);
}
/** @type {?} */
var isPM = +h > 12;
/** @type {?} */
var hours = isPM ? +h - 12 : +h;
period = isPeriodValid ? period : isPM ? TimePeriod.PM : TimePeriod.AM;
return hours + ":" + parseInt(m, 10) + " " + period;
};
/**
* @param {?} time
* @param {?=} format
* @return {?}
*/
TimeAdapter.formatTime = /**
* @param {?} time
* @param {?=} format
* @return {?}
*/
function (time, format) {
if (format === void 0) { format = 12; }
/** @type {?} */
var timeFormat = (format === 24) ? TimeFormat.TWENTY_FOUR : TimeFormat.TWELVE;
/** @type {?} */
var timeMask = (format === 24) ? TimeFormat.TWENTY_FOUR_SHORT : TimeFormat.TWELVE_SHORT;
return DateTime.fromFormat(this.parseTime(time, format), timeMask).toFormat(timeFormat).toLowerCase();
};
/**
* @param {?} time
* @param {?=} format
* @return {?}
*/
TimeAdapter.convertTimeToDateTime = /**
* @param {?} time
* @param {?=} format
* @return {?}
*/
function (time, format) {
if (format === void 0) { format = 12; }
/** @type {?} */
var timeMask = (format === 24) ? TimeFormat.TWENTY_FOUR_SHORT : TimeFormat.TWELVE_SHORT;
return DateTime.fromFormat(this.parseTime(time, format), timeMask);
};
/**
* @param {?} time
* @param {?=} min
* @param {?=} max
* @param {?=} granularity
* @param {?=} minutesGap
* @param {?=} format
* @return {?}
*/
TimeAdapter.isTimeAvailable = /**
* @param {?} time
* @param {?=} min
* @param {?=} max
* @param {?=} granularity
* @param {?=} minutesGap
* @param {?=} format
* @return {?}
*/
function (time, min, max, granularity, minutesGap, format) {
if (!time) {
return;
}
/** @type {?} */
var convertedTime = this.convertTimeToDateTime(time, format);
/** @type {?} */
var minutes = convertedTime.minute;
if (minutesGap && (minutes % minutesGap !== 0)) {
throw new Error("Your minutes - " + minutes + " doesn't match your minutesGap - " + minutesGap);
}
/** @type {?} */
var isAfter = (min && !max)
&& isSameOrAfter(convertedTime, min, granularity);
/** @type {?} */
var isBefore = (max && !min)
&& isSameOrBefore(convertedTime, max, granularity);
/** @type {?} */
var between = (min && max)
&& isBetween(convertedTime, min, max, granularity);
/** @type {?} */
var isAvailable = !min && !max;
return isAfter || isBefore || between || isAvailable;
};
/***
* Format hour according to time format (12 or 24)
*/
/**
*
* Format hour according to time format (12 or 24)
* @param {?} currentHour
* @param {?} format
* @param {?} period
* @return {?}
*/
TimeAdapter.formatHour = /**
*
* Format hour according to time format (12 or 24)
* @param {?} currentHour
* @param {?} format
* @param {?} period
* @return {?}
*/
function (currentHour, format, period) {
if (format === 24) {
return currentHour;
}
/** @type {?} */
var hour = period === TimePeriod.AM ? currentHour : currentHour + 12;
if (period === TimePeriod.AM && hour === 12) {
return 0;
}
else if (period === TimePeriod.PM && hour === 24) {
return 12;
}
return hour;
};
return TimeAdapter;
}());
// @dynamic
export { TimeAdapter };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LW1hdGVyaWFsLXRpbWVwaWNrZXItZGVjb24vIiwic291cmNlcyI6WyJzcmMvYXBwL21hdGVyaWFsLXRpbWVwaWNrZXIvc2VydmljZXMvdGltZS1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUVqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQUdyRjs7O0lBQUE7SUFtRkEsQ0FBQzs7Ozs7O0lBakZVLHFCQUFTOzs7OztJQUFoQixVQUFpQixJQUFZLEVBQUUsTUFBVztRQUFYLHVCQUFBLEVBQUEsV0FBVztRQUN0QyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDMUIsT0FBTyxjQUFjLENBQUM7U0FDekI7O1lBQ0csTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7O1lBRXhELGFBQWEsR0FBRyxNQUFNLEtBQUssVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLEtBQUssVUFBVSxDQUFDLEVBQUU7UUFDcEUsSUFBQSx1Q0FBd0IsRUFBdkIsU0FBQyxFQUFFLFNBQW9CO1FBRzlCLElBQUksTUFBTSxLQUFLLEVBQUUsRUFBRTs7Z0JBQ1QsY0FBYyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsbUJBQUEsTUFBTSxFQUFjLENBQUMsQ0FB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LElBQUksT0FBTyxJQUFJLFdBQVcsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7O09BRUc7Ozs7Ozs7OztJQUNJLHNCQUFVOzs7Ozs7OztJQUFqQixVQUFrQixXQUFtQixFQUFFLE1BQWMsRUFBRSxNQUFrQjtRQUNyRSxJQUFJLE1BQU0sS0FBSyxFQUFFLEVBQUU7WUFDZixPQUFPLFdBQVcsQ0FBQztTQUN0Qjs7WUFDSyxJQUFJLEdBQUcsTUFBTSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUU7UUFFdEUsSUFBSSxNQUFNLEtBQUssVUFBVSxDQUFDLEVBQUUsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO1lBQ3pDLE9BQU8sQ0FBQyxDQUFDO1NBQ1o7YUFBTSxJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7WUFDaEQsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDTCxrQkFBQztBQUFELENBQUMsQUFuRkQsSUFtRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcblxuaW1wb3J0IHsgVGltZUZvcm1hdCB9IGZyb20gJy4uL21vZGVscy90aW1lLWZvcm1hdC5lbnVtJztcbmltcG9ydCB7IFRpbWVQZXJpb2QgfSBmcm9tICcuLi9tb2RlbHMvdGltZS1wZXJpb2QuZW51bSc7XG5pbXBvcnQgeyBpc0JldHdlZW4sIGlzU2FtZU9yQWZ0ZXIsIGlzU2FtZU9yQmVmb3JlIH0gZnJvbSAnLi4vdXRpbHMvdGltZXBpY2tlci51dGlscyc7XG5cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgVGltZUFkYXB0ZXIge1xuXG4gICAgc3RhdGljIHBhcnNlVGltZSh0aW1lOiBzdHJpbmcsIGZvcm1hdCA9IDEyKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRpbWUuaW5kZXhPZignOicpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuICdJbnZhbGlkIHRpbWUnO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwZXJpb2QgPSB0aW1lLnRyaW0oKS5zdWJzdHIodGltZS5sZW5ndGggLSAyKS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgIGNvbnN0IGlzUGVyaW9kVmFsaWQgPSBwZXJpb2QgPT09IFRpbWVQZXJpb2QuQU0gfHwgcGVyaW9kID09PSBUaW1lUGVyaW9kLlBNO1xuICAgICAgICBjb25zdCBbaCwgbV0gPSB0aW1lLnNwbGl0KCc6Jyk7XG5cblxuICAgICAgICBpZiAoZm9ybWF0ID09PSAyNCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkSG91cnMgPSBpc1BlcmlvZFZhbGlkID8gdGhpcy5mb3JtYXRIb3VyKCtoLCAxMiwgcGVyaW9kIGFzIFRpbWVQZXJpb2QpIDogK2g7XG4gICAgICAgICAgICByZXR1cm4gYCR7Zm9ybWF0dGVkSG91cnN9OiR7cGFyc2VJbnQobSwgMTApfWA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc1BNID0gK2ggPiAxMjtcbiAgICAgICAgY29uc3QgaG91cnMgPSBpc1BNID8gK2ggLSAxMiA6ICtoO1xuXG4gICAgICAgIHBlcmlvZCA9IGlzUGVyaW9kVmFsaWQgPyBwZXJpb2QgOiBpc1BNID8gVGltZVBlcmlvZC5QTSA6IFRpbWVQZXJpb2QuQU07XG5cbiAgICAgICAgcmV0dXJuIGAke2hvdXJzfToke3BhcnNlSW50KG0sIDEwKX0gJHtwZXJpb2R9YDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZm9ybWF0VGltZSh0aW1lOiBzdHJpbmcsIGZvcm1hdCA9IDEyKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgdGltZUZvcm1hdCA9IChmb3JtYXQgPT09IDI0KSA/IFRpbWVGb3JtYXQuVFdFTlRZX0ZPVVIgOiBUaW1lRm9ybWF0LlRXRUxWRTtcbiAgICAgICAgY29uc3QgdGltZU1hc2sgPSAoZm9ybWF0ID09PSAyNCkgPyBUaW1lRm9ybWF0LlRXRU5UWV9GT1VSX1NIT1JUIDogVGltZUZvcm1hdC5UV0VMVkVfU0hPUlQ7XG5cbiAgICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21Gb3JtYXQodGhpcy5wYXJzZVRpbWUodGltZSwgZm9ybWF0KSwgdGltZU1hc2spLnRvRm9ybWF0KHRpbWVGb3JtYXQpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGNvbnZlcnRUaW1lVG9EYXRlVGltZSh0aW1lOiBzdHJpbmcsIGZvcm1hdCA9IDEyKTogRGF0ZVRpbWUge1xuICAgICAgICBjb25zdCB0aW1lTWFzayA9IChmb3JtYXQgPT09IDI0KSA/IFRpbWVGb3JtYXQuVFdFTlRZX0ZPVVJfU0hPUlQgOiBUaW1lRm9ybWF0LlRXRUxWRV9TSE9SVDtcbiAgICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21Gb3JtYXQodGhpcy5wYXJzZVRpbWUodGltZSwgZm9ybWF0KSwgdGltZU1hc2spO1xuICAgIH1cblxuICAgIHN0YXRpYyBpc1RpbWVBdmFpbGFibGUoXG4gICAgICAgIHRpbWU6IHN0cmluZyxcbiAgICAgICAgbWluPzogRGF0ZVRpbWUsXG4gICAgICAgIG1heD86IERhdGVUaW1lLFxuICAgICAgICBncmFudWxhcml0eT86ICdob3VycycgfCAnbWludXRlcycsXG4gICAgICAgIG1pbnV0ZXNHYXA/OiBudW1iZXIsXG4gICAgICAgIGZvcm1hdD86IG51bWJlclxuICAgICk6IGJvb2xlYW4ge1xuXG4gICAgICAgIGlmICghdGltZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udmVydGVkVGltZSA9IHRoaXMuY29udmVydFRpbWVUb0RhdGVUaW1lKHRpbWUsIGZvcm1hdCk7XG4gICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBjb252ZXJ0ZWRUaW1lLm1pbnV0ZTtcblxuICAgICAgICBpZiAobWludXRlc0dhcCAmJiAobWludXRlcyAlIG1pbnV0ZXNHYXAgIT09IDApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdXIgbWludXRlcyAtICR7bWludXRlc30gZG9lc25cXCd0IG1hdGNoIHlvdXIgbWludXRlc0dhcCAtICR7bWludXRlc0dhcH1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0FmdGVyID0gKG1pbiAmJiAhbWF4KVxuICAgICAgICAgICAgJiYgaXNTYW1lT3JBZnRlcihjb252ZXJ0ZWRUaW1lLCBtaW4sIGdyYW51bGFyaXR5KTtcbiAgICAgICAgY29uc3QgaXNCZWZvcmUgPSAobWF4ICYmICFtaW4pXG4gICAgICAgICAgICAmJiBpc1NhbWVPckJlZm9yZShjb252ZXJ0ZWRUaW1lLCBtYXgsIGdyYW51bGFyaXR5KTtcbiAgICAgICAgY29uc3QgYmV0d2VlbiA9IChtaW4gJiYgbWF4KVxuICAgICAgICAgICAgJiYgaXNCZXR3ZWVuKGNvbnZlcnRlZFRpbWUsIG1pbiwgbWF4LCBncmFudWxhcml0eSk7XG4gICAgICAgIGNvbnN0IGlzQXZhaWxhYmxlID0gIW1pbiAmJiAhbWF4O1xuXG4gICAgICAgIHJldHVybiBpc0FmdGVyIHx8IGlzQmVmb3JlIHx8IGJldHdlZW4gfHwgaXNBdmFpbGFibGU7XG4gICAgfVxuXG4gICAgLyoqKlxuICAgICAqICBGb3JtYXQgaG91ciBhY2NvcmRpbmcgdG8gdGltZSBmb3JtYXQgKDEyIG9yIDI0KVxuICAgICAqL1xuICAgIHN0YXRpYyBmb3JtYXRIb3VyKGN1cnJlbnRIb3VyOiBudW1iZXIsIGZvcm1hdDogbnVtYmVyLCBwZXJpb2Q6IFRpbWVQZXJpb2QpOiBudW1iZXIge1xuICAgICAgICBpZiAoZm9ybWF0ID09PSAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRIb3VyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhvdXIgPSBwZXJpb2QgPT09IFRpbWVQZXJpb2QuQU0gPyBjdXJyZW50SG91ciA6IGN1cnJlbnRIb3VyICsgMTI7XG5cbiAgICAgICAgaWYgKHBlcmlvZCA9PT0gVGltZVBlcmlvZC5BTSAmJiBob3VyID09PSAxMikge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0gZWxzZSBpZiAocGVyaW9kID09PSBUaW1lUGVyaW9kLlBNICYmIGhvdXIgPT09IDI0KSB7XG4gICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgfVxufVxuIl19