UNPKG

@junte/ui

Version:

Quality Angular UI components kit

168 lines 15.5 kB
import { __decorate, __metadata } from "tslib"; import { Component, EventEmitter, HostBinding, Input, Output } from '@angular/core'; import { BehaviorSubject, combineLatest } from 'rxjs'; import { MethodApi, PropertyApi } from '../../core/decorators/api'; import { UI } from '../../core/enums/ui'; export var SECONDS_IN_MINUTE = 60; export var SECONDS_IN_HOUR = 3600; export var HOURS_IN_DAY = 24; var TimerComponent = /** @class */ (function () { function TimerComponent() { this.ui = UI; this.remains = 0; this.counter = { days: 0, hours: 0, minutes: 0, seconds: 0 }; this.days$ = new BehaviorSubject(0); this.hours$ = new BehaviorSubject(0); this.minutes$ = new BehaviorSubject(0); this.seconds$ = new BehaviorSubject(0); this.host = 'jnt-timer-host'; this.tick = new EventEmitter(); this.finished = new EventEmitter(); } Object.defineProperty(TimerComponent.prototype, "days", { get: function () { return this.days$.getValue(); }, set: function (days) { this.days$.next(days); }, enumerable: true, configurable: true }); Object.defineProperty(TimerComponent.prototype, "hours", { get: function () { return this.hours$.getValue(); }, set: function (hours) { this.hours$.next(hours); }, enumerable: true, configurable: true }); Object.defineProperty(TimerComponent.prototype, "minutes", { get: function () { return this.minutes$.getValue(); }, set: function (minutes) { this.minutes$.next(minutes); }, enumerable: true, configurable: true }); Object.defineProperty(TimerComponent.prototype, "seconds", { get: function () { return this.seconds$.getValue(); }, set: function (seconds) { this.seconds$.next(seconds); }, enumerable: true, configurable: true }); TimerComponent.prototype.pause = function () { clearInterval(this.timer); this.timer = null; }; TimerComponent.prototype.reset = function () { this.remains = this.days * SECONDS_IN_HOUR * HOURS_IN_DAY + this.hours * SECONDS_IN_HOUR + this.minutes * SECONDS_IN_MINUTE + this.seconds; this.start(); }; TimerComponent.prototype.ngOnInit = function () { var _this = this; combineLatest([this.days$, this.hours$, this.minutes$, this.seconds$]) .subscribe(function () { _this.remains = _this.days * SECONDS_IN_HOUR * HOURS_IN_DAY + _this.hours * SECONDS_IN_HOUR + _this.minutes * SECONDS_IN_MINUTE + _this.seconds; _this.start(); }); }; TimerComponent.prototype.start = function () { var _this = this; if (!!this.timer) { return; } this.pause(); this.timer = setInterval(function () { if (_this.remains >= 0) { _this.counter.days = Math.floor((_this.remains / SECONDS_IN_HOUR) / HOURS_IN_DAY); _this.counter.hours = Math.floor((_this.remains / SECONDS_IN_HOUR) % HOURS_IN_DAY); _this.counter.minutes = Math.floor((_this.remains / SECONDS_IN_MINUTE) % SECONDS_IN_MINUTE); _this.counter.seconds = Math.floor(_this.remains % SECONDS_IN_MINUTE); _this.remains--; } else { _this.pause(); _this.finished.emit(); } }, 1000); }; __decorate([ HostBinding('attr.host'), __metadata("design:type", Object) ], TimerComponent.prototype, "host", void 0); __decorate([ PropertyApi({ description: 'Days count', type: 'number', }), Input(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number]) ], TimerComponent.prototype, "days", null); __decorate([ PropertyApi({ description: 'Hours count', type: 'number', }), Input(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number]) ], TimerComponent.prototype, "hours", null); __decorate([ PropertyApi({ description: 'Minutes count', type: 'number', }), Input(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number]) ], TimerComponent.prototype, "minutes", null); __decorate([ PropertyApi({ description: 'Seconds count', type: 'number', }), Input(), __metadata("design:type", Number), __metadata("design:paramtypes", [Number]) ], TimerComponent.prototype, "seconds", null); __decorate([ Output(), __metadata("design:type", Object) ], TimerComponent.prototype, "tick", void 0); __decorate([ Output(), __metadata("design:type", Object) ], TimerComponent.prototype, "finished", void 0); __decorate([ MethodApi({ description: 'Pause timer' }), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], TimerComponent.prototype, "pause", null); __decorate([ MethodApi({ description: 'Reset timer' }), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], TimerComponent.prototype, "reset", null); TimerComponent = __decorate([ Component({ selector: 'jnt-timer', template: "{{counter.days}}:{{counter.hours}}:{{counter.minutes}}:{{counter.seconds}}\n", styles: [""] }) ], TimerComponent); return TimerComponent; }()); export { TimerComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGp1bnRlL3VpLyIsInNvdXJjZXMiOlsibGliL2R5bmFtaWMvdGltZXIvdGltZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVN6QyxNQUFNLENBQUMsSUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7QUFDcEMsTUFBTSxDQUFDLElBQU0sZUFBZSxHQUFHLElBQUksQ0FBQztBQUNwQyxNQUFNLENBQUMsSUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBTy9CO0lBQUE7UUFFRSxPQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ1IsWUFBTyxHQUFHLENBQUMsQ0FBQztRQUVaLFlBQU8sR0FBWSxFQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUMsQ0FBQztRQUV2RCxVQUFLLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUMxQyxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFFZixTQUFJLEdBQUcsZ0JBQWdCLENBQUM7UUFrRGpELFNBQUksR0FBRyxJQUFJLFlB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SUFHRDtRQURDLFNBQVMsQ0FBQyxFQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUMsQ0FBQzs7OzsrQ0FJdkM7SUEzRVUsY0FBYztRQUwxQixTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsV0FBVztZQUNyQix3RkFBcUM7O1NBRXRDLENBQUM7T0FDVyxjQUFjLENBMEcxQjtJQUFELHFCQUFDO0NBQUEsQUExR0QsSUEwR0M7U0ExR1ksY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1ldGhvZEFwaSwgUHJvcGVydHlBcGkgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMvYXBpJztcbmltcG9ydCB7IFVJIH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy91aSc7XG5cbnR5cGUgQ291bnRlciA9IHtcbiAgZGF5czogbnVtYmVyLFxuICBob3VyczogbnVtYmVyLFxuICBtaW51dGVzOiBudW1iZXIsXG4gIHNlY29uZHM6IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgU0VDT05EU19JTl9NSU5VVEUgPSA2MDtcbmV4cG9ydCBjb25zdCBTRUNPTkRTX0lOX0hPVVIgPSAzNjAwO1xuZXhwb3J0IGNvbnN0IEhPVVJTX0lOX0RBWSA9IDI0O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdqbnQtdGltZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdGltZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90aW1lci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRpbWVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICB1aSA9IFVJO1xuICByZW1haW5zID0gMDtcbiAgdGltZXI6IGFueTtcbiAgY291bnRlcjogQ291bnRlciA9IHtkYXlzOiAwLCBob3VyczogMCwgbWludXRlczogMCwgc2Vjb25kczogMH07XG5cbiAgcHJpdmF0ZSBkYXlzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBob3VycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHByaXZhdGUgbWludXRlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHByaXZhdGUgc2Vjb25kcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmhvc3QnKSByZWFkb25seSBob3N0ID0gJ2pudC10aW1lci1ob3N0JztcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnRGF5cyBjb3VudCcsXG4gICAgdHlwZTogJ251bWJlcicsXG4gIH0pXG4gIEBJbnB1dCgpIHNldCBkYXlzKGRheXM6IG51bWJlcikge1xuICAgIHRoaXMuZGF5cyQubmV4dChkYXlzKTtcbiAgfVxuXG4gIGdldCBkYXlzKCkge1xuICAgIHJldHVybiB0aGlzLmRheXMkLmdldFZhbHVlKCk7XG4gIH1cblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnSG91cnMgY291bnQnLFxuICAgIHR5cGU6ICdudW1iZXInLFxuICB9KVxuICBASW5wdXQoKSBzZXQgaG91cnMoaG91cnM6IG51bWJlcikge1xuICAgIHRoaXMuaG91cnMkLm5leHQoaG91cnMpO1xuICB9XG5cbiAgZ2V0IGhvdXJzKCkge1xuICAgIHJldHVybiB0aGlzLmhvdXJzJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ01pbnV0ZXMgY291bnQnLFxuICAgIHR5cGU6ICdudW1iZXInLFxuICB9KVxuICBASW5wdXQoKSBzZXQgbWludXRlcyhtaW51dGVzOiBudW1iZXIpIHtcbiAgICB0aGlzLm1pbnV0ZXMkLm5leHQobWludXRlcyk7XG4gIH1cblxuICBnZXQgbWludXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy5taW51dGVzJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1NlY29uZHMgY291bnQnLFxuICAgIHR5cGU6ICdudW1iZXInLFxuICB9KVxuICBASW5wdXQoKSBzZXQgc2Vjb25kcyhzZWNvbmRzOiBudW1iZXIpIHtcbiAgICB0aGlzLnNlY29uZHMkLm5leHQoc2Vjb25kcyk7XG4gIH1cblxuICBnZXQgc2Vjb25kcygpIHtcbiAgICByZXR1cm4gdGhpcy5zZWNvbmRzJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgQE91dHB1dCgpIHRpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGZpbmlzaGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE1ldGhvZEFwaSh7ZGVzY3JpcHRpb246ICdQYXVzZSB0aW1lcid9KVxuICBwYXVzZSgpIHtcbiAgICBjbGVhckludGVydmFsKHRoaXMudGltZXIpO1xuICAgIHRoaXMudGltZXIgPSBudWxsO1xuICB9XG5cbiAgQE1ldGhvZEFwaSh7ZGVzY3JpcHRpb246ICdSZXNldCB0aW1lcid9KVxuICByZXNldCgpIHtcbiAgICB0aGlzLnJlbWFpbnMgPSB0aGlzLmRheXMgKiBTRUNPTkRTX0lOX0hPVVIgKiBIT1VSU19JTl9EQVkgKyB0aGlzLmhvdXJzICogU0VDT05EU19JTl9IT1VSICsgdGhpcy5taW51dGVzICogU0VDT05EU19JTl9NSU5VVEUgKyB0aGlzLnNlY29uZHM7XG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5kYXlzJCwgdGhpcy5ob3VycyQsIHRoaXMubWludXRlcyQsIHRoaXMuc2Vjb25kcyRdKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVtYWlucyA9IHRoaXMuZGF5cyAqIFNFQ09ORFNfSU5fSE9VUiAqIEhPVVJTX0lOX0RBWSArIHRoaXMuaG91cnMgKiBTRUNPTkRTX0lOX0hPVVIgKyB0aGlzLm1pbnV0ZXMgKiBTRUNPTkRTX0lOX01JTlVURSArIHRoaXMuc2Vjb25kcztcbiAgICAgICAgdGhpcy5zdGFydCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBzdGFydCgpIHtcbiAgICBpZiAoISF0aGlzLnRpbWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIHRoaXMudGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5yZW1haW5zID49IDApIHtcbiAgICAgICAgdGhpcy5jb3VudGVyLmRheXMgPSBNYXRoLmZsb29yKCh0aGlzLnJlbWFpbnMgLyBTRUNPTkRTX0lOX0hPVVIpIC8gSE9VUlNfSU5fREFZKTtcbiAgICAgICAgdGhpcy5jb3VudGVyLmhvdXJzID0gTWF0aC5mbG9vcigodGhpcy5yZW1haW5zIC8gU0VDT05EU19JTl9IT1VSKSAlIEhPVVJTX0lOX0RBWSk7XG4gICAgICAgIHRoaXMuY291bnRlci5taW51dGVzID0gTWF0aC5mbG9vcigodGhpcy5yZW1haW5zIC8gU0VDT05EU19JTl9NSU5VVEUpICUgU0VDT05EU19JTl9NSU5VVEUpO1xuICAgICAgICB0aGlzLmNvdW50ZXIuc2Vjb25kcyA9IE1hdGguZmxvb3IodGhpcy5yZW1haW5zICUgU0VDT05EU19JTl9NSU5VVEUpO1xuICAgICAgICB0aGlzLnJlbWFpbnMtLTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgICAgdGhpcy5maW5pc2hlZC5lbWl0KCk7XG4gICAgICB9XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuXG59XG4iXX0=