UNPKG

@ng-doc/ui-kit

Version:

<!-- PROJECT LOGO --> <br /> <div align="center"> <a href="https://github.com/ng-doc/ng-doc"> <img src="https://ng-doc.com/assets/images/ng-doc.svg?raw=true" alt="Logo" height="150px"> </a>

99 lines (93 loc) 2.94 kB
import { Observable, of, pipe } from 'rxjs'; import { startWith, switchMap, map, catchError, tap } from 'rxjs/operators'; import { inject, NgZone } from '@angular/core'; /** * @param subscribable */ function fromSubscribe(subscribable) { return new Observable((observer) => { const subscription = subscribable.subscribe((next) => observer.next(next), (error) => observer.error(error), () => observer.complete()); return () => subscription.unsubscribe(); }); } /** * * @param retry */ function observableState(retry) { return (source) => { let state = { result: null, error: null, pending: false, }; return (retry ? retry.pipe(startWith(null)) : of(null)).pipe(switchMap(() => source.pipe( // Map result of observable map((result) => ({ result, pending: false })), // Map error of observable catchError((error) => of({ result: null, error, pending: false })), // Start from pending state and clear error startWith({ error: null, pending: true }), // Merge the current state with new state tap((updatedState) => (state = { ...state, ...updatedState })), map(() => state)))); }; } class NgDocZoneDetachSourceOperator { constructor(ngZone) { this.ngZone = ngZone; } call(observer, source) { return this.ngZone.runOutsideAngular(() => source.subscribe(observer)); } } /** * * @param ngZone */ function zoneDetachSource(ngZone) { return (source) => source.lift(new NgDocZoneDetachSourceOperator(ngZone)); } /** * * @param ngZone */ function zoneDetach(ngZone) { return (source) => new Observable((subscriber) => source.subscribe({ next: (value) => ngZone.runOutsideAngular(() => subscriber.next(value)), error: (error) => ngZone.runOutsideAngular(() => subscriber.error(error)), complete: () => ngZone.runOutsideAngular(() => subscriber.complete()), })); } /** * * @param ngZone */ function ngDocZoneAttach(ngZone) { ngZone = ngZone || inject(NgZone); return (source) => new Observable((subscriber) => source.subscribe({ next: (value) => ngZone.run(() => subscriber.next(value)), error: (error) => ngZone.run(() => subscriber.error(error)), complete: () => ngZone.run(() => subscriber.complete()), })); } /** * * @param ngZone */ function ngDocZoneDetach(ngZone) { ngZone = ngZone || inject(NgZone); return pipe(zoneDetach(ngZone), zoneDetachSource(ngZone)); } /** * * @param ngZone */ function ngDocZoneOptimize(ngZone) { ngZone = ngZone || inject(NgZone); return pipe(zoneDetach(ngZone), zoneDetachSource(ngZone), ngDocZoneAttach(ngZone)); } /** * Generated bundle index. Do not edit. */ export { fromSubscribe, ngDocZoneAttach, ngDocZoneDetach, ngDocZoneOptimize, observableState }; //# sourceMappingURL=ng-doc-ui-kit-observables.mjs.map