UNPKG

ngnz-time-input

Version:

Material design time input for Angular 8

158 lines 18.1 kB
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