ngnz-time-input
Version:
Material design time input for Angular 8
158 lines • 18.1 kB
JavaScript
import { EventEmitter } from '@angular/core';
import { filter } from 'rxjs/operators';
import { TimeInputMode } from '../../datatypes/time-input-mode.enum';
var TimeValue = /** @class */ (function () {
function TimeValue(inputMode) {
var _this = this;
if (inputMode === void 0) { 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(function (val) { return val !== 0; }))
.subscribe(function (data) { return _this.setMinutes(_this.minutes + data); });
this.exeedMinutes
.pipe(filter(function (val) { return val !== 0; }))
.subscribe(function (data) { return _this.setHours(_this.hours + data); });
}
Object.defineProperty(TimeValue.prototype, "hours", {
get: function () {
return this._hours;
},
enumerable: true,
configurable: true
});
TimeValue.prototype.setHours = function (value, emitChange) {
if (emitChange === void 0) { emitChange = true; }
if (this._hours !== value) {
var 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;
};
Object.defineProperty(TimeValue.prototype, "minutes", {
get: function () {
return this._minutes;
},
enumerable: true,
configurable: true
});
TimeValue.prototype.setMinutes = function (value, emitChange) {
if (emitChange === void 0) { emitChange = true; }
if (this._minutes !== value) {
var 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;
};
Object.defineProperty(TimeValue.prototype, "seconds", {
get: function () {
return this._seconds;
},
enumerable: true,
configurable: true
});
TimeValue.prototype.setSeconds = function (value, emitChange) {
if (emitChange === void 0) { emitChange = true; }
if (this._seconds !== value) {
var 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;
};
Object.defineProperty(TimeValue.prototype, "value", {
get: function () {
return {
hours: this.hours,
minutes: this.minutes,
seconds: this.seconds,
};
},
enumerable: true,
configurable: true
});
TimeValue.prototype.setValue = function (hours, minutes, seconds) {
this.setHours(hours).setMinutes(minutes).setSeconds(seconds);
};
TimeValue.prototype._setPart = function (value, maxLimit) {
var partVal = 0;
var exeedVal = 0;
var minLimit = this.TIME_LIMITS.zero;
var 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,
};
};
return TimeValue;
}());
export { TimeValue };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS12YWx1ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nbnotdGltZS1pbnB1dC8iLCJzb3VyY2VzIjpbImxpYi9jbGFzc2VzL3RpbWUtdmFsdWUvdGltZS12YWx1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFLckU7SUFvQkksbUJBQ1csU0FBMkQ7UUFEdEUsaUJBU0M7UUFSVSwwQkFBQSxFQUFBLFlBQTJCLGFBQWEsQ0FBQyxrQkFBa0I7UUFBM0QsY0FBUyxHQUFULFNBQVMsQ0FBa0Q7UUFwQjdELGdCQUFXLEdBQUc7WUFDbkIsSUFBSSxFQUFFLENBQUM7WUFDUCxLQUFLLEVBQUUsRUFBRTtZQUNULE9BQU8sRUFBRSxFQUFFO1lBQ1gsT0FBTyxFQUFFLEVBQUU7U0FDZCxDQUFDO1FBTUssZUFBVSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDeEMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzFDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUUxQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDMUMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzVDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUsvQyxJQUFJLENBQUMsWUFBWTthQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBQyxHQUFHLElBQUssT0FBQSxHQUFHLEtBQUssQ0FBQyxFQUFULENBQVMsQ0FBQyxDQUFDO2FBQ2hDLFNBQVMsQ0FBQyxVQUFDLElBQVksSUFBSyxPQUFBLEtBQUksQ0FBQyxVQUFVLENBQUMsS0FBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBcEMsQ0FB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T0FBTyxHQUFHLFFBQVEsQ0FBQztpQkFDdEI7cUJBQU0sSUFBSSxLQUFLLEdBQUcsUUFBUSxFQUFFO29CQUN6QixPQUFPLEdBQUcsUUFBUSxDQUFDO2lCQUN0QjtxQkFBTTtvQkFDSCxPQUFPLEdBQUcsS0FBSyxDQUFDO2lCQUNuQjtnQkFDRCxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLE1BQU07WUFDVixLQUFLLGFBQWEsQ0FBQyxrQkFBa0I7Z0JBQ2pDLElBQUksS0FBSyxHQUFHLFFBQVEsRUFBRTtvQkFDbEIsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUM7b0JBQzFCLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQztpQkFDMUM7cUJBQU0sSUFBSSxLQUFLLEdBQUcsUUFBUSxFQUFFO29CQUN6QixPQUFPLEdBQUcsT0FBTyxHQUFHLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDO29CQUN0QyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUM5QztxQkFBTTtvQkFDSCxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNoQixRQUFRLEdBQUcsQ0FBQyxDQUFDO2lCQUNoQjtnQkFDRCxNQUFNO1NBQ2I7UUFDRCxPQUFPO1lBQ0gsS0FBSyxFQUFFLE9BQU87WUFDZCxVQUFVLEVBQUUsUUFBUTtTQUNBLENBQUM7SUFDN0IsQ0FBQztJQUNMLGdCQUFDO0FBQUQsQ0FBQyxBQTFJRCxJQTBJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBUaW1lSW5wdXRNb2RlIH0gZnJvbSAnLi4vLi4vZGF0YXR5cGVzL3RpbWUtaW5wdXQtbW9kZS5lbnVtJztcbmltcG9ydCB7IFRpbWVWYWx1ZVNldE91dFR5cGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3RpbWUtdmFsdWUtc2V0LW91dC10eXBlJztcbmltcG9ydCB7IFRpbWVWYWx1ZVR5cGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3RpbWUtdmFsdWUtdHlwZSc7XG5cblxuZXhwb3J0IGNsYXNzIFRpbWVWYWx1ZSBpbXBsZW1lbnRzIFRpbWVWYWx1ZVR5cGUge1xuICAgIHJlYWRvbmx5IFRJTUVfTElNSVRTID0ge1xuICAgICAgICB6ZXJvOiAwLFxuICAgICAgICBob3VyczogMjMsXG4gICAgICAgIG1pbnV0ZXM6IDU5LFxuICAgICAgICBzZWNvbmRzOiA1OSxcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIF9ob3VyczogbnVtYmVyO1xuICAgIHByb3RlY3RlZCBfbWludXRlczogbnVtYmVyO1xuICAgIHByb3RlY3RlZCBfc2Vjb25kczogbnVtYmVyO1xuXG4gICAgcHVibGljIGV4ZWVkSG91cnMgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgICBwdWJsaWMgZXhlZWRNaW51dGVzID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gICAgcHVibGljIGV4ZWVkU2Vjb25kcyA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgcHVibGljIGhvdXJzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICAgIHB1YmxpYyBtaW51dGVzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICAgIHB1YmxpYyBzZWNvbmRzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBpbnB1dE1vZGU6IFRpbWVJbnB1dE1vZGUgPSBUaW1lSW5wdXRNb2RlLkNpcmN1bGFyRm9yd2FyZGluZ1xuICAgICkge1xuICAgICAgICB0aGlzLmV4ZWVkU2Vjb25kc1xuICAgICAgICAgICAgLnBpcGUoZmlsdGVyKCh2YWwpID0+IHZhbCAhPT0gMCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBudW1iZXIpID0+IHRoaXMuc2V0TWludXRlcyh0aGlzLm1pbnV0ZXMgKyBkYXRhKSk7XG4gICAgICAgIHRoaXMuZXhlZWRNaW51dGVzXG4gICAgICAgICAgICAucGlwZShmaWx0ZXIoKHZhbCkgPT4gdmFsICE9PSAwKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IG51bWJlcikgPT4gdGhpcy5zZXRIb3Vycyh0aGlzLmhvdXJzICsgZGF0YSkpO1xuICAgIH1cblxuICAgIGdldCBob3VycygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5faG91cnM7XG4gICAgfVxuICAgIHNldEhvdXJzKHZhbHVlOiBudW1iZXIsIGVtaXRDaGFuZ2UgPSB0cnVlKTogVGltZVZhbHVlIHtcbiAgICAgICAgaWYgKHRoaXMuX2hvdXJzICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcGFydFZhbCA9IHRoaXMuX3NldFBhcnQodmFsdWUsIHRoaXMuVElNRV9MSU1JVFMuaG91cnMpO1xuICAgICAgICAgICAgdGhpcy5faG91cnMgPSBwYXJ0VmFsLnZhbHVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRNb2RlID09PSBUaW1lSW5wdXRNb2RlLkNpcmN1bGFyRm9yd2FyZGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhlZWRIb3Vycy5lbWl0KHBhcnRWYWwuZXhlZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZW1pdENoYW5nZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaG91cnNDaGFuZ2VkLmVtaXQodGhpcy5faG91cnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQgbWludXRlcygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWludXRlcztcbiAgICB9XG4gICAgc2V0TWludXRlcyh2YWx1ZTogbnVtYmVyLCBlbWl0Q2hhbmdlID0gdHJ1ZSk6IFRpbWVWYWx1ZSB7XG4gICAgICAgIGlmICh0aGlzLl9taW51dGVzICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcGFydFZhbCA9IHRoaXMuX3NldFBhcnQodmFsdWUsIHRoaXMuVElNRV9MSU1JVFMubWludXRlcyk7XG4gICAgICAgICAgICB0aGlzLl9taW51dGVzID0gcGFydFZhbC52YWx1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0TW9kZSA9PT0gVGltZUlucHV0TW9kZS5DaXJjdWxhckZvcndhcmRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4ZWVkTWludXRlcy5lbWl0KHBhcnRWYWwuZXhlZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZW1pdENoYW5nZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWludXRlc0NoYW5nZWQuZW1pdCh0aGlzLl9taW51dGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0IHNlY29uZHMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlY29uZHM7XG4gICAgfVxuICAgIHNldFNlY29uZHModmFsdWU6IG51bWJlciwgZW1pdENoYW5nZSA9IHRydWUpOiBUaW1lVmFsdWUge1xuICAgICAgICBpZiAodGhpcy5fc2Vjb25kcyAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRWYWwgPSB0aGlzLl9zZXRQYXJ0KHZhbHVlLCB0aGlzLlRJTUVfTElNSVRTLnNlY29uZHMpO1xuICAgICAgICAgICAgdGhpcy5fc2Vjb25kcyA9IHBhcnRWYWwudmFsdWU7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dE1vZGUgPT09IFRpbWVJbnB1dE1vZGUuQ2lyY3VsYXJGb3J3YXJkaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leGVlZFNlY29uZHMuZW1pdChwYXJ0VmFsLmV4ZWVkVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVtaXRDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlY29uZHNDaGFuZ2VkLmVtaXQodGhpcy5fc2Vjb25kcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZ2V0IHZhbHVlKCk6IFRpbWVWYWx1ZVR5cGUge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaG91cnM6IHRoaXMuaG91cnMsXG4gICAgICAgICAgICBtaW51dGVzOiB0aGlzLm1pbnV0ZXMsXG4gICAgICAgICAgICBzZWNvbmRzOiB0aGlzLnNlY29uZHMsXG4gICAgICAgIH0gYXMgVGltZVZhbHVlVHlwZTtcbiAgICB9XG4gICAgc2V0VmFsdWUoaG91cnM6IG51bWJlciwgbWludXRlczogbnVtYmVyLCBzZWNvbmRzOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRIb3Vycyhob3Vycykuc2V0TWludXRlcyhtaW51dGVzKS5zZXRTZWNvbmRzKHNlY29uZHMpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfc2V0UGFydChcbiAgICAgICAgdmFsdWU6IG51bWJlcixcbiAgICAgICAgbWF4TGltaXQ6IG51bWJlclxuICAgICk6IFRpbWVWYWx1ZVNldE91dFR5cGUge1xuICAgICAgICBsZXQgcGFydFZhbCA9IDA7XG4gICAgICAgIGxldCBleGVlZFZhbCA9IDA7XG4gICAgICAgIGNvbnN0IG1pbkxpbWl0ID0gdGhpcy5USU1FX0xJTUlUUy56ZXJvO1xuICAgICAgICBjb25zdCBkaXZpZGVyID0gbWF4TGltaXQgKyAxO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuaW5wdXRNb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFRpbWVJbnB1dE1vZGUuTGltaXQ6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID4gbWF4TGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydFZhbCA9IG1heExpbWl0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPCBtaW5MaW1pdCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0VmFsID0gbWluTGltaXQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydFZhbCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBleGVlZFZhbCA9IDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFRpbWVJbnB1dE1vZGUuQ2lyY3VsYXI6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID4gbWF4TGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydFZhbCA9IG1pbkxpbWl0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPCBtaW5MaW1pdCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0VmFsID0gbWF4TGltaXQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydFZhbCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBleGVlZFZhbCA9IDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFRpbWVJbnB1dE1vZGUuQ2lyY3VsYXJGb3J3YXJkaW5nOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IG1heExpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRWYWwgPSB2YWx1ZSAlIGRpdmlkZXI7XG4gICAgICAgICAgICAgICAgICAgIGV4ZWVkVmFsID0gTWF0aC5yb3VuZCh2YWx1ZSAvIGRpdmlkZXIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPCBtaW5MaW1pdCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0VmFsID0gZGl2aWRlciArICh2YWx1ZSAlIGRpdmlkZXIpO1xuICAgICAgICAgICAgICAgICAgICBleGVlZFZhbCA9IE1hdGgucm91bmQodmFsdWUgLyBkaXZpZGVyKSAtIDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydFZhbCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBleGVlZFZhbCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcGFydFZhbCxcbiAgICAgICAgICAgIGV4ZWVkVmFsdWU6IGV4ZWVkVmFsLFxuICAgICAgICB9IGFzIFRpbWVWYWx1ZVNldE91dFR5cGU7XG4gICAgfVxufVxuIl19