@krai-tech/web-api
Version:
A set of common tokens for consuming Web API with Angular.
29 lines • 4.25 kB
JavaScript
import { inject, InjectionToken } from '@angular/core';
import { Observable, share } from 'rxjs';
import { WINDOW } from './window.api';
/**
* Injection token for an Observable based on `window.requestAnimationFrame`.
*
* This token provides an Observable that emits timestamps on each animation frame.
* It utilizes the WINDOW injection token to access the requestAnimationFrame and cancelAnimationFrame
* methods of the global window object. The Observable is shared to ensure multiple subscribers
* receive the same animation frame updates.
*/
export const ANIMATION_FRAME = new InjectionToken('Shared Observable based on `window.requestAnimationFrame`', {
factory: () => {
const { requestAnimationFrame, cancelAnimationFrame } = inject(WINDOW);
const animationFrame$ = new Observable(subscriber => {
let id = NaN;
const callback = (timestamp) => {
subscriber.next(timestamp);
id = requestAnimationFrame(callback);
};
id = requestAnimationFrame(callback);
return () => {
cancelAnimationFrame(id);
};
});
return animationFrame$.pipe(share());
},
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9uLWZyYW1lLmFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1hcGkvdG9rZW5zL3NyYy9hbmltYXRpb24tZnJhbWUuYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdEM7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FDL0MsMkRBQTJELEVBQzNEO0lBQ0UsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNaLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RSxNQUFNLGVBQWUsR0FBRyxJQUFJLFVBQVUsQ0FBc0IsVUFBVSxDQUFDLEVBQUU7WUFDdkUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDO1lBQ2IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxTQUE4QixFQUFRLEVBQUU7Z0JBQ3hELFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzNCLEVBQUUsR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUM7WUFFRixFQUFFLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFckMsT0FBTyxHQUFHLEVBQUU7Z0JBQ1Ysb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0IsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0YsQ0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3QsIEluamVjdGlvblRva2VufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgc2hhcmV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgV0lORE9XIH0gZnJvbSAnLi93aW5kb3cuYXBpJztcblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gZm9yIGFuIE9ic2VydmFibGUgYmFzZWQgb24gYHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVgLlxuICpcbiAqIFRoaXMgdG9rZW4gcHJvdmlkZXMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRpbWVzdGFtcHMgb24gZWFjaCBhbmltYXRpb24gZnJhbWUuXG4gKiBJdCB1dGlsaXplcyB0aGUgV0lORE9XIGluamVjdGlvbiB0b2tlbiB0byBhY2Nlc3MgdGhlIHJlcXVlc3RBbmltYXRpb25GcmFtZSBhbmQgY2FuY2VsQW5pbWF0aW9uRnJhbWVcbiAqIG1ldGhvZHMgb2YgdGhlIGdsb2JhbCB3aW5kb3cgb2JqZWN0LiBUaGUgT2JzZXJ2YWJsZSBpcyBzaGFyZWQgdG8gZW5zdXJlIG11bHRpcGxlIHN1YnNjcmliZXJzXG4gKiByZWNlaXZlIHRoZSBzYW1lIGFuaW1hdGlvbiBmcmFtZSB1cGRhdGVzLlxuICovXG5leHBvcnQgY29uc3QgQU5JTUFUSU9OX0ZSQU1FID0gbmV3IEluamVjdGlvblRva2VuPE9ic2VydmFibGU8RE9NSGlnaFJlc1RpbWVTdGFtcD4+KFxuICAnU2hhcmVkIE9ic2VydmFibGUgYmFzZWQgb24gYHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVgJyxcbiAge1xuICAgIGZhY3Rvcnk6ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLCBjYW5jZWxBbmltYXRpb25GcmFtZSB9ID0gaW5qZWN0KFdJTkRPVyk7XG4gICAgICBjb25zdCBhbmltYXRpb25GcmFtZSQgPSBuZXcgT2JzZXJ2YWJsZTxET01IaWdoUmVzVGltZVN0YW1wPihzdWJzY3JpYmVyID0+IHtcbiAgICAgICAgbGV0IGlkID0gTmFOO1xuICAgICAgICBjb25zdCBjYWxsYmFjayA9ICh0aW1lc3RhbXA6IERPTUhpZ2hSZXNUaW1lU3RhbXApOiB2b2lkID0+IHtcbiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodGltZXN0YW1wKTtcbiAgICAgICAgICBpZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpO1xuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBhbmltYXRpb25GcmFtZSQucGlwZShzaGFyZSgpKTtcbiAgICB9LFxuICB9LFxuKTtcbiJdfQ==