ng19-date-picker
Version:
https://github.com/vlio20/angular-datepicker
121 lines • 16.8 kB
JavaScript
import { Injectable } from '@angular/core';
import { dayjsRef } from '../common/dayjs/dayjs.ref';
import * as i0 from "@angular/core";
import * as i1 from "../common/services/utils/utils.service";
export const FIRST_PM_HOUR = 12;
export 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: ':',
};
}
getConfig(config) {
const timeConfigs = {
maxTime: this.utilsService.onlyTime(config && config.maxTime),
minTime: this.utilsService.onlyTime(config && config.minTime)
};
return {
...this.DEFAULT_CONFIG,
...this.utilsService.clearUndefined(config),
...timeConfigs
};
}
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 || dayjsRef();
return time && time.format(config.showTwentyFourHours ? config.hours24Format : config.hours12Format);
}
getMinutes(config, t) {
const time = t || dayjsRef();
return time && time.format(config.minutesFormat);
}
getSeconds(config, t) {
const time = t || dayjsRef();
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.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.add(amount, unit);
}
toggleMeridiem(time) {
if (time.hour() < FIRST_PM_HOUR) {
return time.add(12, 'hour');
}
else {
return time.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)));
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: TimeSelectService, deps: [{ token: i1.UtilsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: TimeSelectService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: TimeSelectService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.UtilsService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1zZWxlY3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nMi1kYXRlLXBpY2tlci9zcmMvbGliL3RpbWUtc2VsZWN0L3RpbWUtc2VsZWN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUt6QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7OztBQUduRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBS2hDLE1BQU0sT0FBTyxpQkFBaUI7SUFjNUIsWUFBNkIsWUFBMEI7UUFBMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFiOUMsbUJBQWMsR0FBOEI7WUFDbkQsYUFBYSxFQUFFLElBQUk7WUFDbkIsYUFBYSxFQUFFLElBQUk7WUFDbkIsY0FBYyxFQUFFLEdBQUc7WUFDbkIsYUFBYSxFQUFFLElBQUk7WUFDbkIsZUFBZSxFQUFFLENBQUM7WUFDbEIsYUFBYSxFQUFFLElBQUk7WUFDbkIsZUFBZSxFQUFFLENBQUM7WUFDbEIsV0FBVyxFQUFFLEtBQUs7WUFDbEIsbUJBQW1CLEVBQUUsS0FBSztZQUMxQixhQUFhLEVBQUUsR0FBRztTQUNuQixDQUFDO0lBR0YsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUF5QjtRQUNqQyxNQUFNLFdBQVcsR0FBRztZQUNsQixPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDN0QsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDO1NBQzlELENBQUM7UUFFRixPQUFrQztZQUNoQyxHQUFHLElBQUksQ0FBQyxjQUFjO1lBQ3RCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxj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RCx3QkFBd0IsQ0FBQyxNQUFpQyxFQUFFLElBQVc7UUFDckUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDcEUsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztlQUNwRCxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztlQUNuRCxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2VBQ3RGLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDOzhHQXZIVSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZoQixNQUFNOzsyRkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtVdGlsc1NlcnZpY2V9IGZyb20gJy4uL2NvbW1vbi9zZXJ2aWNlcy91dGlscy91dGlscy5zZXJ2aWNlJztcbmltcG9ydCB7SVRpbWVTZWxlY3RDb25maWcsIElUaW1lU2VsZWN0Q29uZmlnSW50ZXJuYWx9IGZyb20gJy4vdGltZS1zZWxlY3QtY29uZmlnLm1vZGVsJztcbmltcG9ydCB7RGF5anN9IGZyb20gJ2RheWpzJztcbmltcG9ydCB7ZGF5anNSZWZ9IGZyb20gJy4uL2NvbW1vbi9kYXlqcy9kYXlqcy5yZWYnO1xuXG5leHBvcnQgdHlwZSBUaW1lVW5pdCA9ICdob3VyJyB8ICdtaW51dGUnIHwgJ3NlY29uZCc7XG5leHBvcnQgY29uc3QgRklSU1RfUE1fSE9VUiA9IDEyO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUaW1lU2VsZWN0U2VydmljZSB7XG4gIHJlYWRvbmx5IERFRkFVTFRfQ09ORklHOiBJVGltZVNlbGVjdENvbmZpZ0ludGVybmFsID0ge1xuICAgIGhvdXJzMTJGb3JtYXQ6ICdoaCcsXG4gICAgaG91cnMyNEZvcm1hdDogJ0hIJyxcbiAgICBtZXJpZGllbUZvcm1hdDogJ0EnLFxuICAgIG1pbnV0ZXNGb3JtYXQ6ICdtbScsXG4gICAgbWludXRlc0ludGVydmFsOiAxLFxuICAgIHNlY29uZHNGb3JtYXQ6ICdzcycsXG4gICAgc2Vjb25kc0ludGVydmFsOiAxLFxuICAgIHNob3dTZWNvbmRzOiBmYWxzZSxcbiAgICBzaG93VHdlbnR5Rm91ckhvdXJzOiBmYWxzZSxcbiAgICB0aW1lU2VwYXJhdG9yOiAnOicsXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB1dGlsc1NlcnZpY2U6IFV0aWxzU2VydmljZSkge1xuICB9XG5cbiAgZ2V0Q29uZmlnKGNvbmZpZzogSVRpbWVTZWxlY3RDb25maWcpOiBJVGltZVNlbGVjdENvbmZpZ0ludGVybmFsIHtcbiAgICBjb25zdCB0aW1lQ29uZmlncyA9IHtcbiAgICAgIG1heFRpbWU6IHRoaXMudXRpbHNTZXJ2aWNlLm9ubHlUaW1lKGNvbmZpZyAmJiBjb25maWcubWF4VGltZSksXG4gICAgICBtaW5UaW1lOiB0aGlzLnV0aWxzU2VydmljZS5vbmx5VGltZShjb25maWcgJiYgY29uZmlnLm1pblRpbWUpXG4gICAgfTtcblxuICAgIHJldHVybiA8SVRpbWVTZWxlY3RDb25maWdJbnRlcm5hbD57XG4gICAgICAuLi50aGlzLkRFRkFVTFRfQ09ORklHLFxuICAgICAgLi4udGhpcy51dGlsc1NlcnZpY2UuY2xlYXJVbmRlZmluZWQoY29uZmlnKSxcbiAgICAgIC4uLnRpbWVDb25maWdzXG4gICAgfTtcbiAgfVxuXG4gIGdldFRpbWVGb3JtYXQoY29uZmlnOiBJVGltZVNlbGVjdENvbmZpZ0ludGVybmFsKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKGNvbmZpZy5zaG93VHdlbnR5Rm91ckhvdXJzID8gY29uZmlnLmhvdXJzMjRGb3JtYXQgOiBjb25maWcuaG91cnMxMkZvcm1hdClcbiAgICAgICsgY29uZmlnLnRpbWVTZXBhcmF0b3IgKyBjb25maWcubWludXRlc0Zvcm1hdFxuICAgICAgKyAoY29uZmlnLnNob3dTZWNvbmRzID8gKGNvbmZpZy50aW1lU2VwYXJhdG9yICsgY29uZmlnLnNlY29uZHNGb3JtYXQpIDogJycpXG4gICAgICArIChjb25maWcuc2hvd1R3ZW50eUZvdXJIb3VycyA/ICcnIDogJyAnICsgY29uZmlnLm1lcmlkaWVtRm9ybWF0KTtcbiAgfVxuXG4gIGdldEhvdXJzKGNvbmZpZzogSVRpbWVTZWxlY3RDb25maWdJbnRlcm5hbCwgdDogRGF5anMgfCBudWxsKTogc3RyaW5nIHtcbiAgICBjb25zdCB0aW1lID0gdCB8fCBkYXlqc1JlZigpO1xuICAgIHJldHVybiB0aW1lICYmIHRpbWUuZm9ybWF0KGNvbmZpZy5zaG93VHdlbnR5Rm91ckhvdXJzID8gY29uZmlnLmhvdXJzMjRGb3JtYXQgOiBjb25maWcuaG91cnMxMkZvcm1hdCk7XG4gIH1cblxuICBnZXRNaW51dGVzKGNvbmZpZzogSVRpbWVTZWxlY3RDb25maWdJbnRlcm5hbCwgdDogRGF5anMgfCBudWxsKTogc3RyaW5nIHtcbiAgICBjb25zdCB0aW1lID0gdCB8fCBkYXlqc1JlZigpO1xuICAgIHJldHVybiB0aW1lICYmIHRpbWUuZm9ybWF0KGNvbmZpZy5taW51dGVzRm9ybWF0KTtcbiAgfVxuXG4gIGdldFNlY29uZHMoY29uZmlnOiBJVGltZVNlbGVjdENvbmZpZ0ludGVybmFsLCB0OiBEYXlqcyB8IG51bGwpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRpbWUgPSB0IHx8IGRheWpzUmVmKCk7XG4gICAgcmV0dXJuIHRpbWUgJiYgdGltZS5mb3JtYXQoY29uZmlnLnNlY29uZHNGb3JtYXQpO1xuICB9XG5cbiAgZ2V0TWVyaWRpZW0oY29uZmlnOiBJVGltZVNlbGVjdENvbmZpZ0ludGVybmFsLCB0aW1lOiBEYXlqcyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRpbWUgJiYgdGltZS5mb3JtYXQoY29uZmlnLm1lcmlkaWVtRm9ybWF0KTtcbiAgfVxuXG4gIGRlY3JlYXNlKGNvbmZpZzogSVRpbWVTZWxlY3RDb25maWdJbnRlcm5hbCwgdGltZTogRGF5anMsIHVuaXQ6IFRpbWVVbml0KTogRGF5anMge1xuICAgIGxldCBhbW91bnQ6IG51bWJlciA9IDE7XG4gICAgc3dpdGNoICh1bml0KSB7XG4gICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICBhbW91bnQgPSBjb25maWcubWludXRlc0ludGVydmFsO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIGFtb3VudCA9IGNvbmZpZy5zZWNvbmRzSW50ZXJ2YWw7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gdGltZS5zdWJ0cmFjdChhbW91bnQsIHVuaXQpO1xuICB9XG5cbiAgaW5jcmVhc2UoY29uZmlnOiBJVGltZVNlbGVjdENvbmZpZ0ludGVybmFsLCB0aW1lOiBEYXlqcywgdW5pdDogVGltZVVuaXQpOiBEYXlqcyB7XG4gICAgbGV0IGFtb3VudDogbnVtYmVyID0gMTtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgIGFtb3VudCA9IGNvbmZpZy5taW51dGVzSW50ZXJ2YWw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgYW1vdW50ID0gY29uZmlnLnNlY29uZHNJbnRlcnZhbDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiB0aW1lLmFkZChhbW91bnQsIHVuaXQpO1xuICB9XG5cbiAgdG9nZ2xlTWVyaWRpZW0odGltZTogRGF5anMpOiBEYXlqcyB7XG4gICAgaWYgKHRpbWUuaG91cigpIDwgRklSU1RfUE1fSE9VUikge1xuICAgICAgcmV0dXJuIHRpbWUuYWRkKDEyLCAnaG91cicpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGltZS5zdWJ0cmFjdCgxMiwgJ2hvdXInKTtcbiAgICB9XG4gIH1cblxuICBzaG91bGRTaG93RGVjcmVhc2UoY29uZmlnOiBJVGltZVNlbGVjdENvbmZpZ0ludGVybmFsLCB0aW1lOiBEYXlqcywgdW5pdDogVGltZVVuaXQpOiBib29sZWFuIHtcbiAgICBpZiAoIWNvbmZpZy5taW4gJiYgIWNvbmZpZy5taW5UaW1lKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgbmV3VGltZSA9IHRoaXMuZGVjcmVhc2UoY29uZmlnLCB0aW1lLCB1bml0KTtcblxuICAgIHJldHVybiAoIWNvbmZpZy5taW4gfHwgY29uZmlnLm1pbi5pc1NhbWVPckJlZm9yZShuZXdUaW1lKSlcbiAgICAgICYmICghY29uZmlnLm1pblRpbWUgfHwgY29uZmlnLm1pblRpbWUuaXNTYW1lT3JCZWZvcmUodGhpcy51dGlsc1NlcnZpY2Uub25seVRpbWUobmV3VGltZSkpKTtcbiAgfVxuXG4gIHNob3VsZFNob3dJbmNyZWFzZShjb25maWc6IElUaW1lU2VsZWN0Q29uZmlnSW50ZXJuYWwsIHRpbWU6IERheWpzLCB1bml0OiBUaW1lVW5pdCk6IGJvb2xlYW4ge1xuICAgIGlmICghY29uZmlnLm1heCAmJiAhY29uZmlnLm1heFRpbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBuZXdUaW1lID0gdGhpcy5pbmNyZWFzZShjb25maWcsIHRpbWUsIHVuaXQpO1xuXG4gICAgcmV0dXJuICghY29uZmlnLm1heCB8fCBjb25maWcubWF4LmlzU2FtZU9yQWZ0ZXIobmV3VGltZSkpXG4gICAgICAmJiAoIWNvbmZpZy5tYXhUaW1lIHx8IGNvbmZpZy5tYXhUaW1lLmlzU2FtZU9yQWZ0ZXIodGhpcy51dGlsc1NlcnZpY2Uub25seVRpbWUobmV3VGltZSkpKTtcbiAgfVxuXG4gIHNob3VsZFNob3dUb2dnbGVNZXJpZGllbShjb25maWc6IElUaW1lU2VsZWN0Q29uZmlnSW50ZXJuYWwsIHRpbWU6IERheWpzKTogYm9vbGVhbiB7XG4gICAgaWYgKCFjb25maWcubWluICYmICFjb25maWcubWF4ICYmICFjb25maWcubWluVGltZSAmJiAhY29uZmlnLm1heFRpbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBuZXdUaW1lID0gdGhpcy50b2dnbGVNZXJpZGllbSh0aW1lKTtcbiAgICByZXR1cm4gKCFjb25maWcubWF4IHx8IGNvbmZpZy5tYXguaXNTYW1lT3JBZnRlcihuZXdUaW1lKSlcbiAgICAgICYmICghY29uZmlnLm1pbiB8fCBjb25maWcubWluLmlzU2FtZU9yQmVmb3JlKG5ld1RpbWUpKVxuICAgICAgJiYgKCFjb25maWcubWF4VGltZSB8fCBjb25maWcubWF4VGltZS5pc1NhbWVPckFmdGVyKHRoaXMudXRpbHNTZXJ2aWNlLm9ubHlUaW1lKG5ld1RpbWUpKSlcbiAgICAgICYmICghY29uZmlnLm1pblRpbWUgfHwgY29uZmlnLm1pblRpbWUuaXNTYW1lT3JCZWZvcmUodGhpcy51dGlsc1NlcnZpY2Uub25seVRpbWUobmV3VGltZSkpKTtcbiAgfVxufVxuIl19