UNPKG

@anexia/ngx-loading-tools

Version:

This library provides a toolset for common loading state management, by providing hackable Loading Strategies and a Http Interceptor.

33 lines 5.26 kB
import { __decorate } from "tslib"; import { BehaviorSubject, of } from "rxjs"; import { Memoize } from "typescript-memoize"; import { distinctUntilChanged, shareReplay, switchMap } from "rxjs/operators"; export class DistinctLoadingHandler { constructor(selector) { this.selector = selector; this._loadingStateSubject = new BehaviorSubject({}); } start(request) { this._updateState(this.selector(request), true); } stop(request) { this._updateState(this.selector(request), false); } isLoading$(requestSelector) { return this._loadingStateSubject.asObservable().pipe(switchMap(currentState => { if (!currentState.hasOwnProperty(requestSelector)) { return of(false); } return of(currentState[requestSelector]); }), distinctUntilChanged(), shareReplay(1)); } _updateState(requestId, value) { const currentState = this._loadingStateSubject.getValue(); const newState = Object.assign(Object.assign({}, currentState), { [requestId]: value }); this._loadingStateSubject.next(newState); } } __decorate([ Memoize((requestSelector) => requestSelector) ], DistinctLoadingHandler.prototype, "isLoading$", null); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzdGluY3QtbG9hZGluZy1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxvYWRpbmctdG9vbHMvc3JjL2xpYi9zdHJhdGVnaWVzL2Rpc3RpbmN0LWxvYWRpbmctaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFDLGVBQWUsRUFBYyxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFLNUUsTUFBTSxPQUFPLHNCQUFzQjtJQUlqQyxZQUEyQixRQUFpQztRQUFqQyxhQUFRLEdBQVIsUUFBUSxDQUF5QjtRQUZwRCx5QkFBb0IsR0FBRyxJQUFJLGVBQWUsQ0FBMkIsRUFBRSxDQUFDLENBQUM7SUFHakYsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUF5QjtRQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVNLElBQUksQ0FBQyxPQUF5QjtRQUNuQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUdNLFVBQVUsQ0FBQyxlQUF1QjtRQUN2QyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQ2xELFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsRUFBRTtnQkFDakQsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbEI7WUFDRCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsRUFDRixvQkFBb0IsRUFBRSxFQUN0QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUNKLENBQUM7SUFFTyxZQUFZLENBQUMsU0FBaUIsRUFBRSxLQUFjO1FBQ3BELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxRCxNQUFNLFFBQVEsbUNBQU8sWUFBWSxLQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxHQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBQ0Y7QUFsQkM7SUFEQyxPQUFPLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQzt3REFZN0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xvYWRpbmdIYW5kbGVyU3RyYXRlZ3l9IGZyb20gXCIuLi9pbnRlcmZhY2VzL2xvYWRpbmctaGFuZGxlci1zdHJhdGVneVwiO1xuaW1wb3J0IHtIdHRwUmVxdWVzdH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2Z9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge01lbW9pemV9IGZyb20gXCJ0eXBlc2NyaXB0LW1lbW9pemVcIjtcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgUmVxdWVzdFNlbGVjdG9yU3RyYXRlZ3kgfSBmcm9tIFwiQGFuZXhpYS9uZ3gtaW50ZXJjZXB0b3ItdG9vbHNcIjtcblxuZXhwb3J0IHR5cGUgRGlzdGluY3RMb2FkaW5nU3RhdGVEaWN0ID0geyBbc2VsZWN0b3I6IHN0cmluZ106IGJvb2xlYW4gfVxuXG5leHBvcnQgY2xhc3MgRGlzdGluY3RMb2FkaW5nSGFuZGxlciBpbXBsZW1lbnRzIExvYWRpbmdIYW5kbGVyU3RyYXRlZ3kge1xuXG4gIHByaXZhdGUgX2xvYWRpbmdTdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERpc3RpbmN0TG9hZGluZ1N0YXRlRGljdD4oe30pO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlbGVjdG9yOiBSZXF1ZXN0U2VsZWN0b3JTdHJhdGVneSkge1xuICB9XG5cbiAgcHVibGljIHN0YXJ0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLl91cGRhdGVTdGF0ZSh0aGlzLnNlbGVjdG9yKHJlcXVlc3QpLCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzdG9wKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLl91cGRhdGVTdGF0ZSh0aGlzLnNlbGVjdG9yKHJlcXVlc3QpLCBmYWxzZSk7XG4gIH1cblxuICBATWVtb2l6ZSgocmVxdWVzdFNlbGVjdG9yKSA9PiByZXF1ZXN0U2VsZWN0b3IpXG4gIHB1YmxpYyBpc0xvYWRpbmckKHJlcXVlc3RTZWxlY3Rvcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmdTdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcChjdXJyZW50U3RhdGUgPT4ge1xuICAgICAgICBpZiAoIWN1cnJlbnRTdGF0ZS5oYXNPd25Qcm9wZXJ0eShyZXF1ZXN0U2VsZWN0b3IpKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2YoY3VycmVudFN0YXRlW3JlcXVlc3RTZWxlY3Rvcl0pO1xuICAgICAgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlU3RhdGUocmVxdWVzdElkOiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy5fbG9hZGluZ1N0YXRlU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgIGNvbnN0IG5ld1N0YXRlID0gey4uLmN1cnJlbnRTdGF0ZSwgW3JlcXVlc3RJZF06IHZhbHVlfTtcbiAgICB0aGlzLl9sb2FkaW5nU3RhdGVTdWJqZWN0Lm5leHQobmV3U3RhdGUpO1xuICB9XG59XG4iXX0=