ngnz-time-input
Version:
Material design time input for Angular 8
135 lines • 16.7 kB
JavaScript
import { EventEmitter } from '@angular/core';
import { filter } from 'rxjs/operators';
import { TimeInputMode } from '../../datatypes/time-input-mode.enum';
export class TimeValue {
constructor(inputMode = TimeInputMode.CircularForwarding) {
this.inputMode = inputMode;
this.TIME_LIMITS = {
zero: 0,
hours: 23,
minutes: 59,
seconds: 59,
};
this.exeedHours = new EventEmitter();
this.exeedMinutes = new EventEmitter();
this.exeedSeconds = new EventEmitter();
this.hoursChanged = new EventEmitter();
this.minutesChanged = new EventEmitter();
this.secondsChanged = new EventEmitter();
this.exeedSeconds
.pipe(filter((val) => val !== 0))
.subscribe((data) => this.setMinutes(this.minutes + data));
this.exeedMinutes
.pipe(filter((val) => val !== 0))
.subscribe((data) => this.setHours(this.hours + data));
}
get hours() {
return this._hours;
}
setHours(value, emitChange = true) {
if (this._hours !== value) {
const partVal = this._setPart(value, this.TIME_LIMITS.hours);
this._hours = partVal.value;
if (this.inputMode === TimeInputMode.CircularForwarding) {
this.exeedHours.emit(partVal.exeedValue);
}
if (emitChange) {
this.hoursChanged.emit(this._hours);
}
}
return this;
}
get minutes() {
return this._minutes;
}
setMinutes(value, emitChange = true) {
if (this._minutes !== value) {
const partVal = this._setPart(value, this.TIME_LIMITS.minutes);
this._minutes = partVal.value;
if (this.inputMode === TimeInputMode.CircularForwarding) {
this.exeedMinutes.emit(partVal.exeedValue);
}
if (emitChange) {
this.minutesChanged.emit(this._minutes);
}
}
return this;
}
get seconds() {
return this._seconds;
}
setSeconds(value, emitChange = true) {
if (this._seconds !== value) {
const partVal = this._setPart(value, this.TIME_LIMITS.seconds);
this._seconds = partVal.value;
if (this.inputMode === TimeInputMode.CircularForwarding) {
this.exeedSeconds.emit(partVal.exeedValue);
}
if (emitChange) {
this.secondsChanged.emit(this._seconds);
}
}
return this;
}
get value() {
return {
hours: this.hours,
minutes: this.minutes,
seconds: this.seconds,
};
}
setValue(hours, minutes, seconds) {
this.setHours(hours).setMinutes(minutes).setSeconds(seconds);
}
_setPart(value, maxLimit) {
let partVal = 0;
let exeedVal = 0;
const minLimit = this.TIME_LIMITS.zero;
const divider = maxLimit + 1;
switch (this.inputMode) {
case TimeInputMode.Limit:
if (value > maxLimit) {
partVal = maxLimit;
}
else if (value < minLimit) {
partVal = minLimit;
}
else {
partVal = value;
}
exeedVal = 0;
break;
case TimeInputMode.Circular:
if (value > maxLimit) {
partVal = minLimit;
}
else if (value < minLimit) {
partVal = maxLimit;
}
else {
partVal = value;
}
exeedVal = 0;
break;
case TimeInputMode.CircularForwarding:
if (value > maxLimit) {
partVal = value % divider;
exeedVal = Math.round(value / divider);
}
else if (value < minLimit) {
partVal = divider + (value % divider);
exeedVal = Math.round(value / divider) - 1;
}
else {
partVal = value;
exeedVal = 0;
}
break;
}
return {
value: partVal,
exeedValue: exeedVal,
};
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS12YWx1ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nbnotdGltZS1pbnB1dC8iLCJzb3VyY2VzIjpbImxpYi9jbGFzc2VzL3RpbWUtdmFsdWUvdGltZS12YWx1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFLckUsTUFBTSxPQUFPLFNBQVM7SUFvQmxCLFlBQ1csWUFBMkIsYUFBYSxDQUFDLGtCQUFrQjtRQUEzRCxjQUFTLEdBQVQsU0FBUyxDQUFrRDtRQXBCN0QsZ0JBQVcsR0FBRztZQUNuQixJQUFJLEVBQUUsQ0FBQztZQUNQLEtBQUssRUFBRSxFQUFFO1lBQ1QsT0FBTyxFQUFFLEVBQUU7WUFDWCxPQUFPLEVBQUUsRUFBRTtTQUNkLENBQUM7UUFNSyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN4QyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDMUMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRTFDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMxQyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDNUMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBSy9DLElBQUksQ0FBQyxZQUFZO2FBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ2hDLFNBQVMsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLFlB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YUFBYSxDQUFDLGtCQUFrQjtnQkFDakMsSUFBSSxLQUFLLEdBQUcsUUFBUSxFQUFFO29CQUNsQixPQUFPLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQztvQkFDMUIsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDO2lCQUMxQztxQkFBTSxJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUU7b0JBQ3pCLE9BQU8sR0FBRyxPQUFPLEdBQUcsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUM7b0JBQ3RDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzlDO3FCQUFNO29CQUNILE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ2hCLFFBQVEsR0FBRyxDQUFDLENBQUM7aUJBQ2hCO2dCQUNELE1BQU07U0FDYjtRQUNELE9BQU87WUFDSCxLQUFLLEVBQUUsT0FBTztZQUNkLFVBQVUsRUFBRSxRQUFRO1NBQ0EsQ0FBQztJQUM3QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgVGltZUlucHV0TW9kZSB9IGZyb20gJy4uLy4uL2RhdGF0eXBlcy90aW1lLWlucHV0LW1vZGUuZW51bSc7XG5pbXBvcnQgeyBUaW1lVmFsdWVTZXRPdXRUeXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy90aW1lLXZhbHVlLXNldC1vdXQtdHlwZSc7XG5pbXBvcnQgeyBUaW1lVmFsdWVUeXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy90aW1lLXZhbHVlLXR5cGUnO1xuXG5cbmV4cG9ydCBjbGFzcyBUaW1lVmFsdWUgaW1wbGVtZW50cyBUaW1lVmFsdWVUeXBlIHtcbiAgICByZWFkb25seSBUSU1FX0xJTUlUUyA9IHtcbiAgICAgICAgemVybzogMCxcbiAgICAgICAgaG91cnM6IDIzLFxuICAgICAgICBtaW51dGVzOiA1OSxcbiAgICAgICAgc2Vjb25kczogNTksXG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBfaG91cnM6IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgX21pbnV0ZXM6IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgX3NlY29uZHM6IG51bWJlcjtcblxuICAgIHB1YmxpYyBleGVlZEhvdXJzID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gICAgcHVibGljIGV4ZWVkTWludXRlcyA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICAgIHB1YmxpYyBleGVlZFNlY29uZHMgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIHB1YmxpYyBob3Vyc0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgICBwdWJsaWMgbWludXRlc0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgICBwdWJsaWMgc2Vjb25kc0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgaW5wdXRNb2RlOiBUaW1lSW5wdXRNb2RlID0gVGltZUlucHV0TW9kZS5DaXJjdWxhckZvcndhcmRpbmdcbiAgICApIHtcbiAgICAgICAgdGhpcy5leGVlZFNlY29uZHNcbiAgICAgICAgICAgIC5waXBlKGZpbHRlcigodmFsKSA9PiB2YWwgIT09IDApKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogbnVtYmVyKSA9PiB0aGlzLnNldE1pbnV0ZXModGhpcy5taW51dGVzICsgZGF0YSkpO1xuICAgICAgICB0aGlzLmV4ZWVkTWludXRlc1xuICAgICAgICAgICAgLnBpcGUoZmlsdGVyKCh2YWwpID0+IHZhbCAhPT0gMCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBudW1iZXIpID0+IHRoaXMuc2V0SG91cnModGhpcy5ob3VycyArIGRhdGEpKTtcbiAgICB9XG5cbiAgICBnZXQgaG91cnMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hvdXJzO1xuICAgIH1cbiAgICBzZXRIb3Vycyh2YWx1ZTogbnVtYmVyLCBlbWl0Q2hhbmdlID0gdHJ1ZSk6IFRpbWVWYWx1ZSB7XG4gICAgICAgIGlmICh0aGlzLl9ob3VycyAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRWYWwgPSB0aGlzLl9zZXRQYXJ0KHZhbHVlLCB0aGlzLlRJTUVfTElNSVRTLmhvdXJzKTtcbiAgICAgICAgICAgIHRoaXMuX2hvdXJzID0gcGFydFZhbC52YWx1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0TW9kZSA9PT0gVGltZUlucHV0TW9kZS5DaXJjdWxhckZvcndhcmRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4ZWVkSG91cnMuZW1pdChwYXJ0VmFsLmV4ZWVkVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVtaXRDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvdXJzQ2hhbmdlZC5lbWl0KHRoaXMuX2hvdXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IG1pbnV0ZXMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbnV0ZXM7XG4gICAgfVxuICAgIHNldE1pbnV0ZXModmFsdWU6IG51bWJlciwgZW1pdENoYW5nZSA9IHRydWUpOiBUaW1lVmFsdWUge1xuICAgICAgICBpZiAodGhpcy5fbWludXRlcyAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRWYWwgPSB0aGlzLl9zZXRQYXJ0KHZhbHVlLCB0aGlzLlRJTUVfTElNSVRTLm1pbnV0ZXMpO1xuICAgICAgICAgICAgdGhpcy5fbWludXRlcyA9IHBhcnRWYWwudmFsdWU7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dE1vZGUgPT09IFRpbWVJbnB1dE1vZGUuQ2lyY3VsYXJGb3J3YXJkaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leGVlZE1pbnV0ZXMuZW1pdChwYXJ0VmFsLmV4ZWVkVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVtaXRDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZXNDaGFuZ2VkLmVtaXQodGhpcy5fbWludXRlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldCBzZWNvbmRzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWNvbmRzO1xuICAgIH1cbiAgICBzZXRTZWNvbmRzKHZhbHVlOiBudW1iZXIsIGVtaXRDaGFuZ2UgPSB0cnVlKTogVGltZVZhbHVlIHtcbiAgICAgICAgaWYgKHRoaXMuX3NlY29uZHMgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0VmFsID0gdGhpcy5fc2V0UGFydCh2YWx1ZSwgdGhpcy5USU1FX0xJTUlUUy5zZWNvbmRzKTtcbiAgICAgICAgICAgIHRoaXMuX3NlY29uZHMgPSBwYXJ0VmFsLnZhbHVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRNb2RlID09PSBUaW1lSW5wdXRNb2RlLkNpcmN1bGFyRm9yd2FyZGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhlZWRTZWNvbmRzLmVtaXQocGFydFZhbC5leGVlZFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbWl0Q2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWNvbmRzQ2hhbmdlZC5lbWl0KHRoaXMuX3NlY29uZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGdldCB2YWx1ZSgpOiBUaW1lVmFsdWVUeXBlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhvdXJzOiB0aGlzLmhvdXJzLFxuICAgICAgICAgICAgbWludXRlczogdGhpcy5taW51dGVzLFxuICAgICAgICAgICAgc2Vjb25kczogdGhpcy5zZWNvbmRzLFxuICAgICAgICB9IGFzIFRpbWVWYWx1ZVR5cGU7XG4gICAgfVxuICAgIHNldFZhbHVlKGhvdXJzOiBudW1iZXIsIG1pbnV0ZXM6IG51bWJlciwgc2Vjb25kczogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0SG91cnMoaG91cnMpLnNldE1pbnV0ZXMobWludXRlcykuc2V0U2Vjb25kcyhzZWNvbmRzKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3NldFBhcnQoXG4gICAgICAgIHZhbHVlOiBudW1iZXIsXG4gICAgICAgIG1heExpbWl0OiBudW1iZXJcbiAgICApOiBUaW1lVmFsdWVTZXRPdXRUeXBlIHtcbiAgICAgICAgbGV0IHBhcnRWYWwgPSAwO1xuICAgICAgICBsZXQgZXhlZWRWYWwgPSAwO1xuICAgICAgICBjb25zdCBtaW5MaW1pdCA9IHRoaXMuVElNRV9MSU1JVFMuemVybztcbiAgICAgICAgY29uc3QgZGl2aWRlciA9IG1heExpbWl0ICsgMTtcbiAgICAgICAgc3dpdGNoICh0aGlzLmlucHV0TW9kZSkge1xuICAgICAgICAgICAgY2FzZSBUaW1lSW5wdXRNb2RlLkxpbWl0OlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IG1heExpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRWYWwgPSBtYXhMaW1pdDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIDwgbWluTGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydFZhbCA9IG1pbkxpbWl0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRWYWwgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXhlZWRWYWwgPSAwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUaW1lSW5wdXRNb2RlLkNpcmN1bGFyOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IG1heExpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRWYWwgPSBtaW5MaW1pdDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIDwgbWluTGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydFZhbCA9IG1heExpbWl0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRWYWwgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXhlZWRWYWwgPSAwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUaW1lSW5wdXRNb2RlLkNpcmN1bGFyRm9yd2FyZGluZzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPiBtYXhMaW1pdCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0VmFsID0gdmFsdWUgJSBkaXZpZGVyO1xuICAgICAgICAgICAgICAgICAgICBleGVlZFZhbCA9IE1hdGgucm91bmQodmFsdWUgLyBkaXZpZGVyKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIDwgbWluTGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydFZhbCA9IGRpdmlkZXIgKyAodmFsdWUgJSBkaXZpZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgZXhlZWRWYWwgPSBNYXRoLnJvdW5kKHZhbHVlIC8gZGl2aWRlcikgLSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRWYWwgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgZXhlZWRWYWwgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHBhcnRWYWwsXG4gICAgICAgICAgICBleGVlZFZhbHVlOiBleGVlZFZhbCxcbiAgICAgICAgfSBhcyBUaW1lVmFsdWVTZXRPdXRUeXBlO1xuICAgIH1cbn1cbiJdfQ==