UNPKG

rxjs-loading-state

Version:

Eliminates manual state management for loading and error states by transforming Observables into a LoadingState

39 lines (38 loc) 1.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.trackLoadingBy = void 0; const rxjs_1 = require("rxjs"); /** * Tracks an observable, by emitting loading events to the passed in state machine * @param {LoadingStateMachine<Data>} loadingStateMachine */ function trackLoadingBy(loadingStateMachine, mapper = (v) => v) { return function (source) { return new rxjs_1.Observable((subscriber) => { loadingStateMachine.start(); const innerSubscription = source.subscribe({ next: (value) => { loadingStateMachine.update(mapper(value)); subscriber.next(value); }, error: (error) => { loadingStateMachine.fail(error); subscriber.error(error); }, complete: () => { loadingStateMachine.succeed(loadingStateMachine.data); subscriber.complete(); }, }); const tearDown = () => { innerSubscription.unsubscribe(); // Reset to not-started if loading was cancelled if (loadingStateMachine.isLoading()) { loadingStateMachine.reset(); } }; return tearDown; }); }; } exports.trackLoadingBy = trackLoadingBy;