UNPKG

ngnz-time-input

Version:

Material design time input for Angular 8

135 lines 16.7 kB
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==