ngx-material-timepicker-decon
Version:
Handy material design timepicker for angular DECONied
115 lines • 12.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
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
export class TimeAdapter {
/**
* @param {?} time
* @param {?=} format
* @return {?}
*/
static parseTime(time, format = 12) {
if (time.indexOf(':') === -1) {
return 'Invalid time';
}
/** @type {?} */
let period = time.trim().substr(time.length - 2).toUpperCase();
/** @type {?} */
const isPeriodValid = period === TimePeriod.AM || period === TimePeriod.PM;
const [h, m] = time.split(':');
if (format === 24) {
/** @type {?} */
const formattedHours = isPeriodValid ? this.formatHour(+h, 12, (/** @type {?} */ (period))) : +h;
return `${formattedHours}:${parseInt(m, 10)}`;
}
/** @type {?} */
const isPM = +h > 12;
/** @type {?} */
const hours = isPM ? +h - 12 : +h;
period = isPeriodValid ? period : isPM ? TimePeriod.PM : TimePeriod.AM;
return `${hours}:${parseInt(m, 10)} ${period}`;
}
/**
* @param {?} time
* @param {?=} format
* @return {?}
*/
static formatTime(time, format = 12) {
/** @type {?} */
const timeFormat = (format === 24) ? TimeFormat.TWENTY_FOUR : TimeFormat.TWELVE;
/** @type {?} */
const 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 {?}
*/
static convertTimeToDateTime(time, format = 12) {
/** @type {?} */
const 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 {?}
*/
static isTimeAvailable(time, min, max, granularity, minutesGap, format) {
if (!time) {
return;
}
/** @type {?} */
const convertedTime = this.convertTimeToDateTime(time, format);
/** @type {?} */
const minutes = convertedTime.minute;
if (minutesGap && (minutes % minutesGap !== 0)) {
throw new Error(`Your minutes - ${minutes} doesn\'t match your minutesGap - ${minutesGap}`);
}
/** @type {?} */
const isAfter = (min && !max)
&& isSameOrAfter(convertedTime, min, granularity);
/** @type {?} */
const isBefore = (max && !min)
&& isSameOrBefore(convertedTime, max, granularity);
/** @type {?} */
const between = (min && max)
&& isBetween(convertedTime, min, max, granularity);
/** @type {?} */
const isAvailable = !min && !max;
return isAfter || isBefore || between || isAvailable;
}
/**
*
* Format hour according to time format (12 or 24)
* @param {?} currentHour
* @param {?} format
* @param {?} period
* @return {?}
*/
static formatHour(currentHour, format, period) {
if (format === 24) {
return currentHour;
}
/** @type {?} */
const 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;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LW1hdGVyaWFsLXRpbWVwaWNrZXItZGVjb24vIiwic291cmNlcyI6WyJzcmMvYXBwL21hdGVyaWFsLXRpbWVwaWNrZXIvc2VydmljZXMvdGltZS1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRWpDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBR3JGLE1BQU0sT0FBTyxXQUFXOzs7Ozs7SUFFcEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFZLEVBQUUsTUFBTSxHQUFHLEVBQUU7UUFDdEMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQzFCLE9BQU8sY0FBYyxDQUFDO1NBQ3pCOztZQUNHLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFOztjQUV4RCxhQUFhLEdBQUcsTUFBTSxLQUFLLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxLQUFLLFVBQVUsQ0FBQyxFQUFFO2NBQ3BFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBRzlCLElBQUksTUFBTSxLQUFLLEVBQUUsRUFBRTs7a0JBQ1QsY0FBYyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsbUJBQUEsTUFBTSxFQUFj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LFFBQVEsSUFBSSxPQUFPLElBQUksV0FBVyxDQUFDO0lBQ3pELENBQUM7Ozs7Ozs7OztJQUtELE1BQU0sQ0FBQyxVQUFVLENBQUMsV0FBbUIsRUFBRSxNQUFjLEVBQUUsTUFBa0I7UUFDckUsSUFBSSxNQUFNLEtBQUssRUFBRSxFQUFFO1lBQ2YsT0FBTyxXQUFXLENBQUM7U0FDdEI7O2NBQ0ssSUFBSSxHQUFHLE1BQU0sS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFO1FBRXRFLElBQUksTUFBTSxLQUFLLFVBQVUsQ0FBQyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRTtZQUN6QyxPQUFPLENBQUMsQ0FBQztTQUNaO2FBQU0sSUFBSSxNQUFNLEtBQUssVUFBVSxDQUFDLEVBQUUsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO1lBQ2hELE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcblxuaW1wb3J0IHsgVGltZUZvcm1hdCB9IGZyb20gJy4uL21vZGVscy90aW1lLWZvcm1hdC5lbnVtJztcbmltcG9ydCB7IFRpbWVQZXJpb2QgfSBmcm9tICcuLi9tb2RlbHMvdGltZS1wZXJpb2QuZW51bSc7XG5pbXBvcnQgeyBpc0JldHdlZW4sIGlzU2FtZU9yQWZ0ZXIsIGlzU2FtZU9yQmVmb3JlIH0gZnJvbSAnLi4vdXRpbHMvdGltZXBpY2tlci51dGlscyc7XG5cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgVGltZUFkYXB0ZXIge1xuXG4gICAgc3RhdGljIHBhcnNlVGltZSh0aW1lOiBzdHJpbmcsIGZvcm1hdCA9IDEyKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRpbWUuaW5kZXhPZignOicpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuICdJbnZhbGlkIHRpbWUnO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwZXJpb2QgPSB0aW1lLnRyaW0oKS5zdWJzdHIodGltZS5sZW5ndGggLSAyKS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgIGNvbnN0IGlzUGVyaW9kVmFsaWQgPSBwZXJpb2QgPT09IFRpbWVQZXJpb2QuQU0gfHwgcGVyaW9kID09PSBUaW1lUGVyaW9kLlBNO1xuICAgICAgICBjb25zdCBbaCwgbV0gPSB0aW1lLnNwbGl0KCc6Jyk7XG5cblxuICAgICAgICBpZiAoZm9ybWF0ID09PSAyNCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkSG91cnMgPSBpc1BlcmlvZFZhbGlkID8gdGhpcy5mb3JtYXRIb3VyKCtoLCAxMiwgcGVyaW9kIGFzIFRpbWVQZXJpb2QpIDogK2g7XG4gICAgICAgICAgICByZXR1cm4gYCR7Zm9ybWF0dGVkSG91cnN9OiR7cGFyc2VJbnQobSwgMTApfWA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc1BNID0gK2ggPiAxMjtcbiAgICAgICAgY29uc3QgaG91cnMgPSBpc1BNID8gK2ggLSAxMiA6ICtoO1xuXG4gICAgICAgIHBlcmlvZCA9IGlzUGVyaW9kVmFsaWQgPyBwZXJpb2QgOiBpc1BNID8gVGltZVBlcmlvZC5QTSA6IFRpbWVQZXJpb2QuQU07XG5cbiAgICAgICAgcmV0dXJuIGAke2hvdXJzfToke3BhcnNlSW50KG0sIDEwKX0gJHtwZXJpb2R9YDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZm9ybWF0VGltZSh0aW1lOiBzdHJpbmcsIGZvcm1hdCA9IDEyKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgdGltZUZvcm1hdCA9IChmb3JtYXQgPT09IDI0KSA/IFRpbWVGb3JtYXQuVFdFTlRZX0ZPVVIgOiBUaW1lRm9ybWF0LlRXRUxWRTtcbiAgICAgICAgY29uc3QgdGltZU1hc2sgPSAoZm9ybWF0ID09PSAyNCkgPyBUaW1lRm9ybWF0LlRXRU5UWV9GT1VSX1NIT1JUIDogVGltZUZvcm1hdC5UV0VMVkVfU0hPUlQ7XG5cbiAgICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21Gb3JtYXQodGhpcy5wYXJzZVRpbWUodGltZSwgZm9ybWF0KSwgdGltZU1hc2spLnRvRm9ybWF0KHRpbWVGb3JtYXQpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGNvbnZlcnRUaW1lVG9EYXRlVGltZSh0aW1lOiBzdHJpbmcsIGZvcm1hdCA9IDEyKTogRGF0ZVRpbWUge1xuICAgICAgICBjb25zdCB0aW1lTWFzayA9IChmb3JtYXQgPT09IDI0KSA/IFRpbWVGb3JtYXQuVFdFTlRZX0ZPVVJfU0hPUlQgOiBUaW1lRm9ybWF0LlRXRUxWRV9TSE9SVDtcbiAgICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21Gb3JtYXQodGhpcy5wYXJzZVRpbWUodGltZSwgZm9ybWF0KSwgdGltZU1hc2spO1xuICAgIH1cblxuICAgIHN0YXRpYyBpc1RpbWVBdmFpbGFibGUoXG4gICAgICAgIHRpbWU6IHN0cmluZyxcbiAgICAgICAgbWluPzogRGF0ZVRpbWUsXG4gICAgICAgIG1heD86IERhdGVUaW1lLFxuICAgICAgICBncmFudWxhcml0eT86ICdob3VycycgfCAnbWludXRlcycsXG4gICAgICAgIG1pbnV0ZXNHYXA/OiBudW1iZXIsXG4gICAgICAgIGZvcm1hdD86IG51bWJlclxuICAgICk6IGJvb2xlYW4ge1xuXG4gICAgICAgIGlmICghdGltZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udmVydGVkVGltZSA9IHRoaXMuY29udmVydFRpbWVUb0RhdGVUaW1lKHRpbWUsIGZvcm1hdCk7XG4gICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBjb252ZXJ0ZWRUaW1lLm1pbnV0ZTtcblxuICAgICAgICBpZiAobWludXRlc0dhcCAmJiAobWludXRlcyAlIG1pbnV0ZXNHYXAgIT09IDApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdXIgbWludXRlcyAtICR7bWludXRlc30gZG9lc25cXCd0IG1hdGNoIHlvdXIgbWludXRlc0dhcCAtICR7bWludXRlc0dhcH1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0FmdGVyID0gKG1pbiAmJiAhbWF4KVxuICAgICAgICAgICAgJiYgaXNTYW1lT3JBZnRlcihjb252ZXJ0ZWRUaW1lLCBtaW4sIGdyYW51bGFyaXR5KTtcbiAgICAgICAgY29uc3QgaXNCZWZvcmUgPSAobWF4ICYmICFtaW4pXG4gICAgICAgICAgICAmJiBpc1NhbWVPckJlZm9yZShjb252ZXJ0ZWRUaW1lLCBtYXgsIGdyYW51bGFyaXR5KTtcbiAgICAgICAgY29uc3QgYmV0d2VlbiA9IChtaW4gJiYgbWF4KVxuICAgICAgICAgICAgJiYgaXNCZXR3ZWVuKGNvbnZlcnRlZFRpbWUsIG1pbiwgbWF4LCBncmFudWxhcml0eSk7XG4gICAgICAgIGNvbnN0IGlzQXZhaWxhYmxlID0gIW1pbiAmJiAhbWF4O1xuXG4gICAgICAgIHJldHVybiBpc0FmdGVyIHx8IGlzQmVmb3JlIHx8IGJldHdlZW4gfHwgaXNBdmFpbGFibGU7XG4gICAgfVxuXG4gICAgLyoqKlxuICAgICAqICBGb3JtYXQgaG91ciBhY2NvcmRpbmcgdG8gdGltZSBmb3JtYXQgKDEyIG9yIDI0KVxuICAgICAqL1xuICAgIHN0YXRpYyBmb3JtYXRIb3VyKGN1cnJlbnRIb3VyOiBudW1iZXIsIGZvcm1hdDogbnVtYmVyLCBwZXJpb2Q6IFRpbWVQZXJpb2QpOiBudW1iZXIge1xuICAgICAgICBpZiAoZm9ybWF0ID09PSAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRIb3VyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhvdXIgPSBwZXJpb2QgPT09IFRpbWVQZXJpb2QuQU0gPyBjdXJyZW50SG91ciA6IGN1cnJlbnRIb3VyICsgMTI7XG5cbiAgICAgICAgaWYgKHBlcmlvZCA9PT0gVGltZVBlcmlvZC5BTSAmJiBob3VyID09PSAxMikge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0gZWxzZSBpZiAocGVyaW9kID09PSBUaW1lUGVyaW9kLlBNICYmIGhvdXIgPT09IDI0KSB7XG4gICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgfVxufVxuIl19