@schoolbelle/common
Version:
82 lines • 5.28 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
*
* browser's default setTimeout is not reliable when
* 1. tabs are inactive (Chrome verified)
* 2. os goes to sleep
*
* this service ATTEMPS to negate these situations.
*
*/
import { Injectable, NgZone } from '@angular/core';
import { Subject } from 'rxjs';
import { takeWhile, map, startWith } from 'rxjs/operators';
import * as i0 from "@angular/core";
export class TimerService {
/**
* @param {?} zone
*/
constructor(zone) {
this.zone = zone;
this.tickEvent = new Subject();
/**
* setInterval is overriden by Angular to cause a change detection cycle.
* avoid unnecessary detection cycles by using zone.runOutsideAnguler.
*/
this.zone.runOutsideAngular((/**
* @return {?}
*/
() => {
setInterval((/**
* @return {?}
*/
() => {
this.tickEvent.next(Date.now());
}), 1000);
}));
}
/**
* this function return observable that tries to stream time left at every second until it passes zero.
* @param {?} timeDiff
* @return {?}
*/
setTimeout(timeDiff) {
/** @type {?} */
const at = Date.now() + timeDiff;
return this.tickEvent.pipe(takeWhile((/**
* @param {?} cts
* @return {?}
*/
cts => cts <= at)), map((/**
* @param {?} cts
* @return {?}
*/
cts => (at - cts))), startWith(timeDiff));
}
}
TimerService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
TimerService.ctorParameters = () => [
{ type: NgZone }
];
/** @nocollapse */ TimerService.ngInjectableDef = i0.defineInjectable({ factory: function TimerService_Factory() { return new TimerService(i0.inject(i0.NgZone)); }, token: TimerService, providedIn: "root" });
if (false) {
/**
* @type {?}
* @private
*/
TimerService.prototype.tickEvent;
/**
* @type {?}
* @private
*/
TimerService.prototype.zone;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzY2hvb2xiZWxsZS9jb21tb24vdGltZXIvIiwic291cmNlcyI6WyJsaWIvdGltZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBU0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLM0QsTUFBTSxPQUFPLFlBQVk7Ozs7SUFFdkIsWUFBb0IsSUFBWTtRQUFaLFNBQUksR0FBSixJQUFJLENBQVE7UUFEeEIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFFeEM7OztXQUdHO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUI7OztRQUFDLEdBQUcsRUFBRTtZQUMvQixXQUFXOzs7WUFBQyxHQUFHLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDbEMsQ0FBQyxHQUFFLElBQUksQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOzs7Ozs7SUFJRCxVQUFVLENBQUMsUUFBZ0I7O2NBQ25CLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUTtRQUNoQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUN4QixTQUFTOzs7O1FBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFDLEVBQzNCLEdBQUc7Ozs7UUFBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFDLEVBQ3RCLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FDcEIsQ0FBQztJQUNKLENBQUM7OztZQTFCRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7Ozs7WUFOb0IsTUFBTTs7Ozs7Ozs7SUFRekIsaUNBQTBDOzs7OztJQUM5Qiw0QkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqXG4gKiBicm93c2VyJ3MgZGVmYXVsdCBzZXRUaW1lb3V0IGlzIG5vdCByZWxpYWJsZSB3aGVuXG4gKiAxLiB0YWJzIGFyZSBpbmFjdGl2ZSAoQ2hyb21lIHZlcmlmaWVkKVxuICogMi4gb3MgZ29lcyB0byBzbGVlcFxuICpcbiAqIHRoaXMgc2VydmljZSBBVFRFTVBTIHRvIG5lZ2F0ZSB0aGVzZSBzaXR1YXRpb25zLlxuICpcbiAqL1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlV2hpbGUsIG1hcCwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUaW1lclNlcnZpY2Uge1xuICBwcml2YXRlIHRpY2tFdmVudCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB6b25lOiBOZ1pvbmUpIHtcbiAgICAvKipcbiAgICAgKiBzZXRJbnRlcnZhbCBpcyBvdmVycmlkZW4gYnkgQW5ndWxhciB0byBjYXVzZSBhIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUuXG4gICAgICogYXZvaWQgdW5uZWNlc3NhcnkgZGV0ZWN0aW9uIGN5Y2xlcyBieSB1c2luZyB6b25lLnJ1bk91dHNpZGVBbmd1bGVyLlxuICAgICAqL1xuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHRoaXMudGlja0V2ZW50Lm5leHQoRGF0ZS5ub3coKSk7XG4gICAgICB9LCAxMDAwKTtcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogdGhpcyBmdW5jdGlvbiByZXR1cm4gb2JzZXJ2YWJsZSB0aGF0IHRyaWVzIHRvIHN0cmVhbSB0aW1lIGxlZnQgYXQgZXZlcnkgc2Vjb25kIHVudGlsIGl0IHBhc3NlcyB6ZXJvLlxuICAgKi9cbiAgc2V0VGltZW91dCh0aW1lRGlmZjogbnVtYmVyKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICBjb25zdCBhdCA9IERhdGUubm93KCkgKyB0aW1lRGlmZjtcbiAgICByZXR1cm4gdGhpcy50aWNrRXZlbnQucGlwZShcbiAgICAgIHRha2VXaGlsZShjdHMgPT4gY3RzIDw9IGF0KSxcbiAgICAgIG1hcChjdHMgPT4gKGF0IC0gY3RzKSksXG4gICAgICBzdGFydFdpdGgodGltZURpZmYpLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==