@junte/ui
Version:
Quality Angular UI components kit
168 lines • 15.5 kB
JavaScript
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=