@krai-tech/web-api
Version:
A set of common tokens for consuming Web API with Angular.
18 lines • 3.58 kB
JavaScript
import { DOCUMENT } from '@angular/common';
import { inject, InjectionToken } from '@angular/core';
import { distinctUntilChanged, fromEvent, map, shareReplay, startWith } from 'rxjs';
/**
* Injection token for an Observable that emits the visibility state of the document.
*
* This token provides an Observable that emits a boolean value indicating whether the document
* is visible or hidden. It uses the `visibilitychange` event of the document to detect changes
* in visibility state. The Observable is shared and replayed, ensuring that subscribers receive
* the latest visibility state.
*/
export const PAGE_VISIBILITY = new InjectionToken('Shared Observable based on `document visibility changed`', {
factory: () => {
const documentRef = inject(DOCUMENT);
return fromEvent(documentRef, 'visibilitychange').pipe(startWith(0), map(() => documentRef.visibilityState !== 'hidden'), distinctUntilChanged(), shareReplay({ refCount: false, bufferSize: 1 }));
},
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS12aXNpYmlsaXR5LmFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1hcGkvdG9rZW5zL3NyYy9wYWdlLXZpc2liaWxpdHkuYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsTUFBTSxFQUFFLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRWxGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxjQUFjLENBQy9DLDBEQUEwRCxFQUMxRDtJQUNFLE9BQU8sRUFBRSxHQUFHLEVBQUU7UUFDWixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFckMsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUNwRCxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQ1osR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEtBQUssUUFBUSxDQUFDLEVBQ25ELG9CQUFvQixFQUFFLEVBQ3RCLFdBQVcsQ0FBQyxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBQyxDQUFDLENBQzlDLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7aW5qZWN0LCBJbmplY3Rpb25Ub2tlbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkLCBmcm9tRXZlbnQsIG1hcCwgc2hhcmVSZXBsYXksIHN0YXJ0V2l0aH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIGZvciBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHZpc2liaWxpdHkgc3RhdGUgb2YgdGhlIGRvY3VtZW50LlxuICpcbiAqIFRoaXMgdG9rZW4gcHJvdmlkZXMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGRvY3VtZW50XG4gKiBpcyB2aXNpYmxlIG9yIGhpZGRlbi4gSXQgdXNlcyB0aGUgYHZpc2liaWxpdHljaGFuZ2VgIGV2ZW50IG9mIHRoZSBkb2N1bWVudCB0byBkZXRlY3QgY2hhbmdlc1xuICogaW4gdmlzaWJpbGl0eSBzdGF0ZS4gVGhlIE9ic2VydmFibGUgaXMgc2hhcmVkIGFuZCByZXBsYXllZCwgZW5zdXJpbmcgdGhhdCBzdWJzY3JpYmVycyByZWNlaXZlXG4gKiB0aGUgbGF0ZXN0IHZpc2liaWxpdHkgc3RhdGUuXG4gKi9cbmV4cG9ydCBjb25zdCBQQUdFX1ZJU0lCSUxJVFkgPSBuZXcgSW5qZWN0aW9uVG9rZW48T2JzZXJ2YWJsZTxib29sZWFuPj4oXG4gICdTaGFyZWQgT2JzZXJ2YWJsZSBiYXNlZCBvbiBgZG9jdW1lbnQgdmlzaWJpbGl0eSBjaGFuZ2VkYCcsXG4gIHtcbiAgICBmYWN0b3J5OiAoKSA9PiB7XG4gICAgICBjb25zdCBkb2N1bWVudFJlZiA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgICAgIHJldHVybiBmcm9tRXZlbnQoZG9jdW1lbnRSZWYsICd2aXNpYmlsaXR5Y2hhbmdlJykucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKDApLFxuICAgICAgICBtYXAoKCkgPT4gZG9jdW1lbnRSZWYudmlzaWJpbGl0eVN0YXRlICE9PSAnaGlkZGVuJyksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KHtyZWZDb3VudDogZmFsc2UsIGJ1ZmZlclNpemU6IDF9KSxcbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbik7XG4iXX0=