cfc-ds
Version:
Design System do Conselho Federal de Contabilidade baseado no govbr-ds
62 lines • 7.52 kB
JavaScript
import { Injectable } from '@angular/core';
import { BehaviorSubject, interval } from 'rxjs';
import { map, takeWhile } from 'rxjs/operators';
import * as i0 from "@angular/core";
export class TimerService {
countdown$ = new BehaviorSubject(null);
subscription = null;
/**
* CONVERTE TEMPO DE DIFERENTES FORMATOS PARA SEGUNDOS
* @param time String no formato 'dias:hh:mm:ss', 'hh:mm:ss', 'mm:ss' ou número em segundos.
*/
parseTimeToSeconds(time) {
if (typeof time === 'number') {
return time;
}
const parts = time.split(':').map(Number).reverse();
const [seconds = 0, minutes = 0, hours = 0, days = 0] = parts;
return seconds + minutes * 60 + hours * 3600 + days * 86400;
}
/**
* INICIA A CONTAGEM REGRESSIVA
* @param time Tempo no formato 'dias:hh:mm:ss', 'hh:mm:ss', 'mm:ss' ou número em segundos.
*/
startCountdown(time) {
const totalSeconds = this.parseTimeToSeconds(time);
if (this.subscription) {
this.subscription.unsubscribe();
}
this.countdown$.next(totalSeconds);
this.subscription = interval(1000)
.pipe(map((elapsed) => totalSeconds - elapsed), takeWhile((timeLeft) => timeLeft >= 0))
.subscribe({
next: (timeLeft) => this.countdown$.next(timeLeft),
complete: () => this.countdown$.next(0),
});
}
/**
* RETORNA O STREAM DO TEMPO RESTANTE
*/
getCountdown() {
return this.countdown$.asObservable();
}
/**
* INTERROMPE A CONTAGEM
*/
stopCountdown() {
if (this.subscription) {
this.subscription.unsubscribe();
this.subscription = null;
}
this.countdown$.next(null);
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TimerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TimerService, providedIn: 'root' });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TimerService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NmYy1kcy9zcmMvbGliL3NlcnZpY2VzL3RpbWVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLaEQsTUFBTSxPQUFPLFlBQVk7SUFDZixVQUFVLEdBQUcsSUFBSSxlQUFlLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBQ3RELFlBQVksR0FBd0IsSUFBSSxDQUFDO0lBRWpEOzs7T0FHRztJQUNLLGtCQUFrQixDQUFDLElBQXFCO1FBQzlDLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEQsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFFOUQsT0FBTyxPQUFPLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxJQUFxQjtRQUNsQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbkQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO2FBQy9CLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsRUFDeEMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQ3ZDO2FBQ0EsU0FBUyxDQUFDO1lBQ1QsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDbEQsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN4QyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzNCLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO3dHQTNEVSxZQUFZOzRHQUFaLFlBQVksY0FGWCxNQUFNOzs0RkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBpbnRlcnZhbCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgdGFrZVdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRpbWVyU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBjb3VudGRvd24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXIgfCBudWxsPihudWxsKTtcclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIENPTlZFUlRFIFRFTVBPIERFIERJRkVSRU5URVMgRk9STUFUT1MgUEFSQSBTRUdVTkRPU1xyXG4gICAqIEBwYXJhbSB0aW1lIFN0cmluZyBubyBmb3JtYXRvICdkaWFzOmhoOm1tOnNzJywgJ2hoOm1tOnNzJywgJ21tOnNzJyBvdSBuw7ptZXJvIGVtIHNlZ3VuZG9zLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGFyc2VUaW1lVG9TZWNvbmRzKHRpbWU6IHN0cmluZyB8IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAodHlwZW9mIHRpbWUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgIHJldHVybiB0aW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcnRzID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpLnJldmVyc2UoKTtcclxuICAgIGNvbnN0IFtzZWNvbmRzID0gMCwgbWludXRlcyA9IDAsIGhvdXJzID0gMCwgZGF5cyA9IDBdID0gcGFydHM7XHJcblxyXG4gICAgcmV0dXJuIHNlY29uZHMgKyBtaW51dGVzICogNjAgKyBob3VycyAqIDM2MDAgKyBkYXlzICogODY0MDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJTklDSUEgQSBDT05UQUdFTSBSRUdSRVNTSVZBXHJcbiAgICogQHBhcmFtIHRpbWUgVGVtcG8gbm8gZm9ybWF0byAnZGlhczpoaDptbTpzcycsICdoaDptbTpzcycsICdtbTpzcycgb3UgbsO6bWVybyBlbSBzZWd1bmRvcy5cclxuICAgKi9cclxuICBzdGFydENvdW50ZG93bih0aW1lOiBzdHJpbmcgfCBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IHRvdGFsU2Vjb25kcyA9IHRoaXMucGFyc2VUaW1lVG9TZWNvbmRzKHRpbWUpO1xyXG5cclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY291bnRkb3duJC5uZXh0KHRvdGFsU2Vjb25kcyk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSBpbnRlcnZhbCgxMDAwKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKGVsYXBzZWQpID0+IHRvdGFsU2Vjb25kcyAtIGVsYXBzZWQpLFxyXG4gICAgICAgIHRha2VXaGlsZSgodGltZUxlZnQpID0+IHRpbWVMZWZ0ID49IDApXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHRpbWVMZWZ0KSA9PiB0aGlzLmNvdW50ZG93biQubmV4dCh0aW1lTGVmdCksXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHRoaXMuY291bnRkb3duJC5uZXh0KDApLFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJFVE9STkEgTyBTVFJFQU0gRE8gVEVNUE8gUkVTVEFOVEVcclxuICAgKi9cclxuICBnZXRDb3VudGRvd24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb3VudGRvd24kLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSU5URVJST01QRSBBIENPTlRBR0VNXHJcbiAgICovXHJcbiAgc3RvcENvdW50ZG93bigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvdW50ZG93biQubmV4dChudWxsKTtcclxuICB9XHJcbn1cclxuIl19