UNPKG

ngx-material-timepicker

Version:
67 lines 11.7 kB
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 { static parseTime(time, format = 12) { if (time.indexOf(':') === -1) { return 'Invalid time'; } let period = time.trim().substr(time.length - 2).toUpperCase(); const isPeriodValid = period === TimePeriod.AM || period === TimePeriod.PM; const [h, m] = time.split(':'); if (format === 24) { const formattedHours = isPeriodValid ? this.formatHour(+h, 12, period) : +h; return `${formattedHours}:${parseInt(m, 10)}`; } const isPM = +h > 12; const hours = isPM ? +h - 12 : +h; period = isPeriodValid ? period : isPM ? TimePeriod.PM : TimePeriod.AM; return `${hours}:${parseInt(m, 10)} ${period}`; } static formatTime(time, format = 12) { const timeFormat = (format === 24) ? TimeFormat.TWENTY_FOUR : TimeFormat.TWELVE; const timeMask = (format === 24) ? TimeFormat.TWENTY_FOUR_SHORT : TimeFormat.TWELVE_SHORT; return DateTime.fromFormat(this.parseTime(time, format), timeMask).toFormat(timeFormat).toLowerCase(); } static convertTimeToDateTime(time, format = 12) { const timeMask = (format === 24) ? TimeFormat.TWENTY_FOUR_SHORT : TimeFormat.TWELVE_SHORT; return DateTime.fromFormat(this.parseTime(time, format), timeMask); } static isTimeAvailable(time, min, max, granularity, minutesGap, format) { if (!time) { return; } const convertedTime = this.convertTimeToDateTime(time, format); const minutes = convertedTime.minute; if (minutesGap && (minutes % minutesGap !== 0)) { throw new Error(`Your minutes - ${minutes} doesn\'t match your minutesGap - ${minutesGap}`); } const isAfter = (min && !max) && isSameOrAfter(convertedTime, min, granularity); const isBefore = (max && !min) && isSameOrBefore(convertedTime, max, granularity); const between = (min && max) && isBetween(convertedTime, min, max, granularity); const isAvailable = !min && !max; return isAfter || isBefore || between || isAvailable; } /*** * Format hour according to time format (12 or 24) */ static formatHour(currentHour, format, period) { if (format === 24) { return currentHour; } 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LW1hdGVyaWFsLXRpbWVwaWNrZXIvIiwic291cmNlcyI6WyJzcmMvYXBwL21hdGVyaWFsLXRpbWVwaWNrZXIvc2VydmljZXMvdGltZS1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFakMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVyRixXQUFXO0FBQ1gsTUFBTSxPQUFPLFdBQVc7SUFFcEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFZLEVBQUUsTUFBTSxHQUFHLEVBQUU7UUFDdEMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQzFCLE9BQU8sY0FBYyxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRS9ELE1BQU0sYUFBYSxHQUFHLE1BQU0sS0FBSyxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzNFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUcvQixJQUFJLE1BQU0sS0FBSyxFQUFFLEVBQUU7WUFDZixNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUYsT0FBTyxHQUFHLGNBQWMsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDakQ7UUFFRCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWxDLE1BQU0sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBRXZFLE9BQU8sR0FBRyxLQUFLLElBQUksUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFZLEVBQUUsTUFBTSxHQUFHLEVBQUU7UUFDdkMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDaEYsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztRQUUxRixPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzFHLENBQUM7SUFFRCxNQUFNLENBQUMscUJBQXFCLENBQUMsSUFBWSxFQUFFLE1BQU0sR0FBRyxFQUFFO1FBQ2xELE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFDMUYsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxNQUFNLENBQUMsZUFBZSxDQUNsQixJQUFZLEVBQ1osR0FBYyxFQUNkLEdBQWMsRUFDZCxXQUFpQyxFQUNqQyxVQUFtQixFQUNuQixNQUFlO1FBR2YsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLE9BQU87U0FDVjtRQUVELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0QsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUVyQyxJQUFJLFVBQVUsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsT0FBTyxxQ0FBcUMsVUFBVSxFQUFFLENBQUMsQ0FBQztTQUMvRjtRQUNELE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO2VBQ3RCLGFBQWEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO2VBQ3ZCLGNBQWMsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztlQUNyQixTQUFTLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDdkQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFFakMsT0FBTyxPQUFPLElBQUksUUFBUSxJQUFJLE9BQU8sSUFBSSxXQUFXLENBQUM7SUFDekQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUFtQixFQUFFLE1BQWMsRUFBRSxNQUFrQjtRQUNyRSxJQUFJLE1BQU0sS0FBSyxFQUFFLEVBQUU7WUFDZixPQUFPLFdBQVcsQ0FBQztTQUN0QjtRQUNELE1BQU0sSUFBSSxHQUFHLE1BQU0sS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFFdkUsSUFBSSxNQUFNLEtBQUssVUFBVSxDQUFDLEVBQUUsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO1lBQ3pDLE9BQU8sQ0FBQyxDQUFDO1NBQ1o7YUFBTSxJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7WUFDaEQsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xuXG5pbXBvcnQgeyBUaW1lRm9ybWF0IH0gZnJvbSAnLi4vbW9kZWxzL3RpbWUtZm9ybWF0LmVudW0nO1xuaW1wb3J0IHsgVGltZVBlcmlvZCB9IGZyb20gJy4uL21vZGVscy90aW1lLXBlcmlvZC5lbnVtJztcbmltcG9ydCB7IGlzQmV0d2VlbiwgaXNTYW1lT3JBZnRlciwgaXNTYW1lT3JCZWZvcmUgfSBmcm9tICcuLi91dGlscy90aW1lcGlja2VyLnV0aWxzJztcblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBUaW1lQWRhcHRlciB7XG5cbiAgICBzdGF0aWMgcGFyc2VUaW1lKHRpbWU6IHN0cmluZywgZm9ybWF0ID0gMTIpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGltZS5pbmRleE9mKCc6JykgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gJ0ludmFsaWQgdGltZSc7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBlcmlvZCA9IHRpbWUudHJpbSgpLnN1YnN0cih0aW1lLmxlbmd0aCAtIDIpLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgY29uc3QgaXNQZXJpb2RWYWxpZCA9IHBlcmlvZCA9PT0gVGltZVBlcmlvZC5BTSB8fCBwZXJpb2QgPT09IFRpbWVQZXJpb2QuUE07XG4gICAgICAgIGNvbnN0IFtoLCBtXSA9IHRpbWUuc3BsaXQoJzonKTtcblxuXG4gICAgICAgIGlmIChmb3JtYXQgPT09IDI0KSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRIb3VycyA9IGlzUGVyaW9kVmFsaWQgPyB0aGlzLmZvcm1hdEhvdXIoK2gsIDEyLCBwZXJpb2QgYXMgVGltZVBlcmlvZCkgOiAraDtcbiAgICAgICAgICAgIHJldHVybiBgJHtmb3JtYXR0ZWRIb3Vyc306JHtwYXJzZUludChtLCAxMCl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzUE0gPSAraCA+IDEyO1xuICAgICAgICBjb25zdCBob3VycyA9IGlzUE0gPyAraCAtIDEyIDogK2g7XG5cbiAgICAgICAgcGVyaW9kID0gaXNQZXJpb2RWYWxpZCA/IHBlcmlvZCA6IGlzUE0gPyBUaW1lUGVyaW9kLlBNIDogVGltZVBlcmlvZC5BTTtcblxuICAgICAgICByZXR1cm4gYCR7aG91cnN9OiR7cGFyc2VJbnQobSwgMTApfSAke3BlcmlvZH1gO1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JtYXRUaW1lKHRpbWU6IHN0cmluZywgZm9ybWF0ID0gMTIpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB0aW1lRm9ybWF0ID0gKGZvcm1hdCA9PT0gMjQpID8gVGltZUZvcm1hdC5UV0VOVFlfRk9VUiA6IFRpbWVGb3JtYXQuVFdFTFZFO1xuICAgICAgICBjb25zdCB0aW1lTWFzayA9IChmb3JtYXQgPT09IDI0KSA/IFRpbWVGb3JtYXQuVFdFTlRZX0ZPVVJfU0hPUlQgOiBUaW1lRm9ybWF0LlRXRUxWRV9TSE9SVDtcblxuICAgICAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUZvcm1hdCh0aGlzLnBhcnNlVGltZSh0aW1lLCBmb3JtYXQpLCB0aW1lTWFzaykudG9Gb3JtYXQodGltZUZvcm1hdCkudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29udmVydFRpbWVUb0RhdGVUaW1lKHRpbWU6IHN0cmluZywgZm9ybWF0ID0gMTIpOiBEYXRlVGltZSB7XG4gICAgICAgIGNvbnN0IHRpbWVNYXNrID0gKGZvcm1hdCA9PT0gMjQpID8gVGltZUZvcm1hdC5UV0VOVFlfRk9VUl9TSE9SVCA6IFRpbWVGb3JtYXQuVFdFTFZFX1NIT1JUO1xuICAgICAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUZvcm1hdCh0aGlzLnBhcnNlVGltZSh0aW1lLCBmb3JtYXQpLCB0aW1lTWFzayk7XG4gICAgfVxuXG4gICAgc3RhdGljIGlzVGltZUF2YWlsYWJsZShcbiAgICAgICAgdGltZTogc3RyaW5nLFxuICAgICAgICBtaW4/OiBEYXRlVGltZSxcbiAgICAgICAgbWF4PzogRGF0ZVRpbWUsXG4gICAgICAgIGdyYW51bGFyaXR5PzogJ2hvdXJzJyB8ICdtaW51dGVzJyxcbiAgICAgICAgbWludXRlc0dhcD86IG51bWJlcixcbiAgICAgICAgZm9ybWF0PzogbnVtYmVyXG4gICAgKTogYm9vbGVhbiB7XG5cbiAgICAgICAgaWYgKCF0aW1lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb252ZXJ0ZWRUaW1lID0gdGhpcy5jb252ZXJ0VGltZVRvRGF0ZVRpbWUodGltZSwgZm9ybWF0KTtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IGNvbnZlcnRlZFRpbWUubWludXRlO1xuXG4gICAgICAgIGlmIChtaW51dGVzR2FwICYmIChtaW51dGVzICUgbWludXRlc0dhcCAhPT0gMCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWW91ciBtaW51dGVzIC0gJHttaW51dGVzfSBkb2VzblxcJ3QgbWF0Y2ggeW91ciBtaW51dGVzR2FwIC0gJHttaW51dGVzR2FwfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzQWZ0ZXIgPSAobWluICYmICFtYXgpXG4gICAgICAgICAgICAmJiBpc1NhbWVPckFmdGVyKGNvbnZlcnRlZFRpbWUsIG1pbiwgZ3JhbnVsYXJpdHkpO1xuICAgICAgICBjb25zdCBpc0JlZm9yZSA9IChtYXggJiYgIW1pbilcbiAgICAgICAgICAgICYmIGlzU2FtZU9yQmVmb3JlKGNvbnZlcnRlZFRpbWUsIG1heCwgZ3JhbnVsYXJpdHkpO1xuICAgICAgICBjb25zdCBiZXR3ZWVuID0gKG1pbiAmJiBtYXgpXG4gICAgICAgICAgICAmJiBpc0JldHdlZW4oY29udmVydGVkVGltZSwgbWluLCBtYXgsIGdyYW51bGFyaXR5KTtcbiAgICAgICAgY29uc3QgaXNBdmFpbGFibGUgPSAhbWluICYmICFtYXg7XG5cbiAgICAgICAgcmV0dXJuIGlzQWZ0ZXIgfHwgaXNCZWZvcmUgfHwgYmV0d2VlbiB8fCBpc0F2YWlsYWJsZTtcbiAgICB9XG5cbiAgICAvKioqXG4gICAgICogIEZvcm1hdCBob3VyIGFjY29yZGluZyB0byB0aW1lIGZvcm1hdCAoMTIgb3IgMjQpXG4gICAgICovXG4gICAgc3RhdGljIGZvcm1hdEhvdXIoY3VycmVudEhvdXI6IG51bWJlciwgZm9ybWF0OiBudW1iZXIsIHBlcmlvZDogVGltZVBlcmlvZCk6IG51bWJlciB7XG4gICAgICAgIGlmIChmb3JtYXQgPT09IDI0KSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudEhvdXI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaG91ciA9IHBlcmlvZCA9PT0gVGltZVBlcmlvZC5BTSA/IGN1cnJlbnRIb3VyIDogY3VycmVudEhvdXIgKyAxMjtcblxuICAgICAgICBpZiAocGVyaW9kID09PSBUaW1lUGVyaW9kLkFNICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIGlmIChwZXJpb2QgPT09IFRpbWVQZXJpb2QuUE0gJiYgaG91ciA9PT0gMjQpIHtcbiAgICAgICAgICAgIHJldHVybiAxMjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaG91cjtcbiAgICB9XG59XG4iXX0=