ng2-date-picker
Version:
[](https://travis-ci.org/vlio20/angular-datepicker) [](#backers) [![Sponsor
120 lines • 16.9 kB
JavaScript
import * as tslib_1 from "tslib";
import { Injectable } from '@angular/core';
import * as momentNs from 'moment';
import { UtilsService } from '../common/services/utils/utils.service';
const moment = momentNs;
export const FIRST_PM_HOUR = 12;
let TimeSelectService = class TimeSelectService {
constructor(utilsService) {
this.utilsService = utilsService;
this.DEFAULT_CONFIG = {
hours12Format: 'hh',
hours24Format: 'HH',
meridiemFormat: 'A',
minutesFormat: 'mm',
minutesInterval: 1,
secondsFormat: 'ss',
secondsInterval: 1,
showSeconds: false,
showTwentyFourHours: false,
timeSeparator: ':',
locale: moment.locale()
};
}
getConfig(config) {
const timeConfigs = {
maxTime: this.utilsService.onlyTime(config && config.maxTime),
minTime: this.utilsService.onlyTime(config && config.minTime)
};
const _config = Object.assign({}, this.DEFAULT_CONFIG, this.utilsService.clearUndefined(config), timeConfigs);
moment.locale(_config.locale);
return _config;
}
getTimeFormat(config) {
return (config.showTwentyFourHours ? config.hours24Format : config.hours12Format)
+ config.timeSeparator + config.minutesFormat
+ (config.showSeconds ? (config.timeSeparator + config.secondsFormat) : '')
+ (config.showTwentyFourHours ? '' : ' ' + config.meridiemFormat);
}
getHours(config, t) {
const time = t || moment();
return time && time.format(config.showTwentyFourHours ? config.hours24Format : config.hours12Format);
}
getMinutes(config, t) {
const time = t || moment();
return time && time.format(config.minutesFormat);
}
getSeconds(config, t) {
const time = t || moment();
return time && time.format(config.secondsFormat);
}
getMeridiem(config, time) {
return time && time.format(config.meridiemFormat);
}
decrease(config, time, unit) {
let amount = 1;
switch (unit) {
case 'minute':
amount = config.minutesInterval;
break;
case 'second':
amount = config.secondsInterval;
break;
}
return time.clone().subtract(amount, unit);
}
increase(config, time, unit) {
let amount = 1;
switch (unit) {
case 'minute':
amount = config.minutesInterval;
break;
case 'second':
amount = config.secondsInterval;
break;
}
return time.clone().add(amount, unit);
}
toggleMeridiem(time) {
if (time.hours() < FIRST_PM_HOUR) {
return time.clone().add(12, 'hour');
}
else {
return time.clone().subtract(12, 'hour');
}
}
shouldShowDecrease(config, time, unit) {
if (!config.min && !config.minTime) {
return true;
}
;
const newTime = this.decrease(config, time, unit);
return (!config.min || config.min.isSameOrBefore(newTime))
&& (!config.minTime || config.minTime.isSameOrBefore(this.utilsService.onlyTime(newTime)));
}
shouldShowIncrease(config, time, unit) {
if (!config.max && !config.maxTime) {
return true;
}
;
const newTime = this.increase(config, time, unit);
return (!config.max || config.max.isSameOrAfter(newTime))
&& (!config.maxTime || config.maxTime.isSameOrAfter(this.utilsService.onlyTime(newTime)));
}
shouldShowToggleMeridiem(config, time) {
if (!config.min && !config.max && !config.minTime && !config.maxTime) {
return true;
}
const newTime = this.toggleMeridiem(time);
return (!config.max || config.max.isSameOrAfter(newTime))
&& (!config.min || config.min.isSameOrBefore(newTime))
&& (!config.maxTime || config.maxTime.isSameOrAfter(this.utilsService.onlyTime(newTime)))
&& (!config.minTime || config.minTime.isSameOrBefore(this.utilsService.onlyTime(newTime)));
}
};
TimeSelectService = tslib_1.__decorate([
Injectable(),
tslib_1.__metadata("design:paramtypes", [UtilsService])
], TimeSelectService);
export { TimeSelectService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1zZWxlY3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nMi1kYXRlLXBpY2tlci8iLCJzb3VyY2VzIjpbInRpbWUtc2VsZWN0L3RpbWUtc2VsZWN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxLQUFLLFFBQVEsTUFBTSxRQUFRLENBQUM7QUFFbkMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBRXBFLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUd4QixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBR2hDLElBQWEsaUJBQWlCLEdBQTlCLE1BQWEsaUJBQWlCO0lBZTVCLFlBQW9CLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBZHJDLG1CQUFjLEdBQThCO1lBQ25ELGFBQWEsRUFBRSxJQUFJO1lBQ25CLGFBQWEsRUFBRSxJQUFJO1lBQ25CLGNBQWMsRUFBRSxHQUFHO1lBQ25CLGFBQWEsRUFBRSxJQUFJO1lBQ25CLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLGFBQWEsRUFBRSxJQUFJO1lBQ25CLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLG1CQUFtQixFQUFFLEtBQUs7WUFDMUIsYUFBYSxFQUFFLEdBQUc7WUFDbEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUU7U0FDeEIsQ0FBQztJQUdGLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBeUI7UUFDakMsTUFBTSxXQUFXLEdBQUc7WUFDbEIsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQzdELE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE9B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N0IsVUFBVSxFQUFFOzZDQWdCdUIsWUFBWTtHQWZuQyxpQkFBaUIsQ0ErSDdCO1NBL0hZLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBtb21lbnROcyBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtNb21lbnR9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge1V0aWxzU2VydmljZX0gZnJvbSAnLi4vY29tbW9uL3NlcnZpY2VzL3V0aWxzL3V0aWxzLnNlcnZpY2UnO1xuaW1wb3J0IHtJVGltZVNlbGVjdENvbmZpZywgSVRpbWVTZWxlY3RDb25maWdJbnRlcm5hbH0gZnJvbSAnLi90aW1lLXNlbGVjdC1jb25maWcubW9kZWwnO1xuY29uc3QgbW9tZW50ID0gbW9tZW50TnM7XG5cbmV4cG9ydCB0eXBlIFRpbWVVbml0ID0gJ2hvdXInIHwgJ21pbnV0ZScgfCAnc2Vjb25kJztcbmV4cG9ydCBjb25zdCBGSVJTVF9QTV9IT1VSID0gMTI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUaW1lU2VsZWN0U2VydmljZSB7XG4gIHJlYWRvbmx5IERFRkFVTFRfQ09ORklHOiBJVGltZVNlbGVjdENvbmZpZ0ludGVybmFsID0ge1xuICAgIGhvdXJzMTJGb3JtYXQ6ICdoaCcsXG4gICAgaG91cnMyNEZvcm1hdDogJ0hIJyxcbiAgICBtZXJpZGllbUZvcm1hdDogJ0EnLFxuICAgIG1pbnV0ZXNGb3JtYXQ6ICdtbScsXG4gICAgbWludXRlc0ludGVydmFsOiAxLFxuICAgIHNlY29uZHNGb3JtYXQ6ICdzcycsXG4gICAgc2Vjb25kc0ludGVydmFsOiAxLFxuICAgIHNob3dTZWNvbmRzOiBmYWxzZSxcbiAgICBzaG93VHdlbnR5Rm91ckhvdXJzOiBmYWxzZSxcbiAgICB0aW1lU2VwYXJhdG9yOiAnOicsXG4gICAgbG9jYWxlOiBtb21lbnQubG9jYWxlKClcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHV0aWxzU2VydmljZTogVXRpbHNTZXJ2aWNlKSB7XG4gIH1cblxuICBnZXRDb25maWcoY29uZmlnOiBJVGltZVNlbGVjdENvbmZpZyk6IElUaW1lU2VsZWN0Q29uZmlnSW50ZXJuYWwge1xuICAgIGNvbnN0IHRpbWVDb25maWdzID0ge1xuICAgICAgbWF4VGltZTogdGhpcy51dGlsc1NlcnZpY2Uub25seVRpbWUoY29uZmlnICYmIGNvbmZpZy5tYXhUaW1lKSxcbiAgICAgIG1pblRpbWU6IHRoaXMudXRpbHNTZXJ2aWNlLm9ubHlUaW1lKGNvbmZpZyAmJiBjb25maWcubWluVGltZSlcbiAgICB9O1xuXG4gICAgY29uc3QgX2NvbmZpZyA9IDxJVGltZVNlbGVjdENvbmZpZ0ludGVybmFsPntcbiAgICAgIC4uLnRoaXMuREVGQVVMVF9DT05GSUcsXG4gICAgICAuLi50aGlzLnV0aWxzU2VydmljZS5jbGVhclVuZGVmaW5lZChjb25maWcpLFxuICAgICAgLi4udGltZUNvbmZpZ3NcbiAgICB9O1xuXG4gICAgbW9tZW50LmxvY2FsZShfY29uZmlnLmxvY2FsZSk7XG5cbiAgICByZXR1cm4gX2NvbmZpZztcbiAgfVxuXG4gIGdldFRpbWVGb3JtYXQoY29uZmlnOiBJVGltZVNlbGVjdENvbmZpZ0ludGVybmFsKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKGNvbmZpZy5zaG93VHdlbnR5Rm91ckhvdXJzID8gY29uZmlnLmhvdXJzMjRGb3JtYXQgOiBjb25maWcuaG91cnMxMkZvcm1hdClcbiAgICAgICsgY29uZmlnLnRpbWVTZXBhcmF0b3IgKyBjb25maWcubWludXRlc0Zvcm1hdFxuICAgICAgKyAoY29uZmlnLnNob3dTZWNvbmRzID8gKGNvbmZpZy50aW1lU2VwYXJhdG9yICsgY29uZmlnLnNlY29uZHNGb3JtYXQpIDogJycpXG4gICAgICArIChjb25maWcuc2hvd1R3ZW50eUZvdXJIb3VycyA/ICcnIDogJyAnICsgY29uZmlnLm1lcmlkaWVtRm9ybWF0KTtcbiAgfVxuXG4gIGdldEhvdXJzKGNvbmZpZzogSVRpbWVTZWxlY3RDb25maWdJbnRlcm5hbCwgdDogTW9tZW50IHwgbnVsbCk6IHN0cmluZyB7XG4gICAgY29uc3QgdGltZSA9IHQgfHwgbW9tZW50KCk7XG4gICAgcmV0dXJuIHRpbWUgJiYgdGltZS5mb3JtYXQoY29uZmlnLnNob3dUd2VudHlGb3VySG91cnMgPyBjb25maWcuaG91cnMyNEZvcm1hdCA6IGNvbmZpZy5ob3VyczEyRm9ybWF0KTtcbiAgfVxuXG4gIGdldE1pbnV0ZXMoY29uZmlnOiBJVGltZVNlbGVjdENvbmZpZ0ludGVybmFsLCB0OiBNb21lbnQgfCBudWxsKTogc3RyaW5nIHtcbiAgICBjb25zdCB0aW1lID0gdCB8fCBtb21lbnQoKTtcbiAgICByZXR1cm4gdGltZSAmJiB0aW1lLmZvcm1hdChjb25maWcubWludXRlc0Zvcm1hdCk7XG4gIH1cblxuICBnZXRTZWNvbmRzKGNvbmZpZzogSVRpbWVTZWxlY3RDb25maWdJbnRlcm5hbCwgdDogTW9tZW50IHwgbnVsbCk6IHN0cmluZyB7XG4gICAgY29uc3QgdGltZSA9IHQgfHwgbW9tZW50KCk7XG4gICAgcmV0dXJuIHRpbWUgJiYgdGltZS5mb3JtYXQoY29uZmlnLnNlY29uZHNGb3JtYXQpO1xuICB9XG5cbiAgZ2V0TWVyaWRpZW0oY29uZmlnOiBJVGltZVNlbGVjdENvbmZpZ0ludGVybmFsLCB0aW1lOiBNb21lbnQpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aW1lICYmIHRpbWUuZm9ybWF0KGNvbmZpZy5tZXJpZGllbUZvcm1hdCk7XG4gIH1cblxuICBkZWNyZWFzZShjb25maWc6IElUaW1lU2VsZWN0Q29uZmlnSW50ZXJuYWwsIHRpbWU6IE1vbWVudCwgdW5pdDogVGltZVVuaXQpOiBNb21lbnQge1xuICAgIGxldCBhbW91bnQ6IG51bWJlciA9IDE7XG4gICAgc3dpdGNoICh1bml0KSB7XG4gICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICBhbW91bnQgPSBjb25maWcubWludXRlc0ludGVydmFsO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIGFtb3VudCA9IGNvbmZpZy5zZWNvbmRzSW50ZXJ2YWw7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gdGltZS5jbG9uZSgpLnN1YnRyYWN0KGFtb3VudCwgdW5pdCk7XG4gIH1cblxuICBpbmNyZWFzZShjb25maWc6IElUaW1lU2VsZWN0Q29uZmlnSW50ZXJuYWwsIHRpbWU6IE1vbWVudCwgdW5pdDogVGltZVVuaXQpOiBNb21lbnQge1xuICAgIGxldCBhbW91bnQ6IG51bWJlciA9IDE7XG4gICAgc3dpdGNoICh1bml0KSB7XG4gICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICBhbW91bnQgPSBjb25maWcubWludXRlc0ludGVydmFsO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIGFtb3VudCA9IGNvbmZpZy5zZWNvbmRzSW50ZXJ2YWw7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gdGltZS5jbG9uZSgpLmFkZChhbW91bnQsIHVuaXQpO1xuICB9XG5cbiAgdG9nZ2xlTWVyaWRpZW0odGltZTogTW9tZW50KTogTW9tZW50IHtcbiAgICBpZiAodGltZS5ob3VycygpIDwgRklSU1RfUE1fSE9VUikge1xuICAgICAgcmV0dXJuIHRpbWUuY2xvbmUoKS5hZGQoMTIsICdob3VyJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aW1lLmNsb25lKCkuc3VidHJhY3QoMTIsICdob3VyJyk7XG4gICAgfVxuICB9XG5cbiAgc2hvdWxkU2hvd0RlY3JlYXNlKGNvbmZpZzogSVRpbWVTZWxlY3RDb25maWdJbnRlcm5hbCwgdGltZTogTW9tZW50LCB1bml0OiBUaW1lVW5pdCk6IGJvb2xlYW4ge1xuICAgIGlmICghY29uZmlnLm1pbiAmJiAhY29uZmlnLm1pblRpbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICA7XG4gICAgY29uc3QgbmV3VGltZSA9IHRoaXMuZGVjcmVhc2UoY29uZmlnLCB0aW1lLCB1bml0KTtcblxuICAgIHJldHVybiAoIWNvbmZpZy5taW4gfHwgY29uZmlnLm1pbi5pc1NhbWVPckJlZm9yZShuZXdUaW1lKSlcbiAgICAgICYmICghY29uZmlnLm1pblRpbWUgfHwgY29uZmlnLm1pblRpbWUuaXNTYW1lT3JCZWZvcmUodGhpcy51dGlsc1NlcnZpY2Uub25seVRpbWUobmV3VGltZSkpKTtcbiAgfVxuXG4gIHNob3VsZFNob3dJbmNyZWFzZShjb25maWc6IElUaW1lU2VsZWN0Q29uZmlnSW50ZXJuYWwsIHRpbWU6IE1vbWVudCwgdW5pdDogVGltZVVuaXQpOiBib29sZWFuIHtcbiAgICBpZiAoIWNvbmZpZy5tYXggJiYgIWNvbmZpZy5tYXhUaW1lKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgO1xuICAgIGNvbnN0IG5ld1RpbWUgPSB0aGlzLmluY3JlYXNlKGNvbmZpZywgdGltZSwgdW5pdCk7XG5cbiAgICByZXR1cm4gKCFjb25maWcubWF4IHx8IGNvbmZpZy5tYXguaXNTYW1lT3JBZnRlcihuZXdUaW1lKSlcbiAgICAgICYmICghY29uZmlnLm1heFRpbWUgfHwgY29uZmlnLm1heFRpbWUuaXNTYW1lT3JBZnRlcih0aGlzLnV0aWxzU2VydmljZS5vbmx5VGltZShuZXdUaW1lKSkpO1xuICB9XG5cbiAgc2hvdWxkU2hvd1RvZ2dsZU1lcmlkaWVtKGNvbmZpZzogSVRpbWVTZWxlY3RDb25maWdJbnRlcm5hbCwgdGltZTogTW9tZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKCFjb25maWcubWluICYmICFjb25maWcubWF4ICYmICFjb25maWcubWluVGltZSAmJiAhY29uZmlnLm1heFRpbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBuZXdUaW1lID0gdGhpcy50b2dnbGVNZXJpZGllbSh0aW1lKTtcbiAgICByZXR1cm4gKCFjb25maWcubWF4IHx8IGNvbmZpZy5tYXguaXNTYW1lT3JBZnRlcihuZXdUaW1lKSlcbiAgICAgICYmICghY29uZmlnLm1pbiB8fCBjb25maWcubWluLmlzU2FtZU9yQmVmb3JlKG5ld1RpbWUpKVxuICAgICAgJiYgKCFjb25maWcubWF4VGltZSB8fCBjb25maWcubWF4VGltZS5pc1NhbWVPckFmdGVyKHRoaXMudXRpbHNTZXJ2aWNlLm9ubHlUaW1lKG5ld1RpbWUpKSlcbiAgICAgICYmICghY29uZmlnLm1pblRpbWUgfHwgY29uZmlnLm1pblRpbWUuaXNTYW1lT3JCZWZvcmUodGhpcy51dGlsc1NlcnZpY2Uub25seVRpbWUobmV3VGltZSkpKTtcbiAgfVxufVxuIl19