UNPKG

@schoolbelle/common

Version:

82 lines 5.28 kB
/** * @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==