@anexia/registry-loading-interceptor
Version:
This library provides an interceptor which maps Http Requests to a Loading State.
81 lines • 13.5 kB
JavaScript
import { Inject, Injectable } from '@angular/core';
import { BehaviorSubject, of, throwError } from 'rxjs';
import { catchError, finalize, map, switchMap, tap } from "rxjs/operators";
import { REQUEST_ID_GENERATOR } from "../tokens/request-id-generator-strategy";
import { REQUEST_FILTER } from "../tokens/request-filter-strategy";
import * as i0 from "@angular/core";
import * as i1 from "../tokens/request-id-generator-strategy";
import * as i2 from "../tokens/request-filter-strategy";
export class RegistryLoadingInterceptor {
constructor(requestIdGenerator, requestFilter) {
this.requestIdGenerator = requestIdGenerator;
this.requestFilter = requestFilter;
this.loadingDictionary = new Map();
this.stateChangeTrigger$ = new BehaviorSubject(false);
this.networkRequestCounter$ = new BehaviorSubject(0);
this.loadingState$ = this.stateChangeTrigger$
.asObservable()
.pipe(switchMap(() => of(this.loadingDictionary)));
this.isAnyRequestLoading$ = this.networkRequestCounter$
.asObservable()
.pipe(map(count => count > 0));
}
static mapEventTypeToLoading(event) {
return (event === null || event === void 0 ? void 0 : event.type) === 0;
}
intercept(request, delegate) {
let requestCancelled = true;
return delegate.handle(request)
.pipe(map((event) => {
if ((event === null || event === void 0 ? void 0 : event.type) === 4) {
requestCancelled = false;
}
return event;
}), this.mapHttpEventToLoadingCount$(), this.mapHttpEventToLoadingState$(request), catchError(error => {
requestCancelled = false;
this.updateLoadingCounter(false);
if (!this.requestFilter.exclude(request)) {
this.updateLoadingState(this.getRequestId(request), false);
}
return throwError(error);
}), finalize(() => {
if (requestCancelled) {
this.decrementCounter();
}
}));
}
mapHttpEventToLoadingState$(request) {
if (this.requestFilter.exclude(request)) {
return tap();
}
return tap(event => this.updateLoadingState(this.getRequestId(request), RegistryLoadingInterceptor.mapEventTypeToLoading(event)));
}
mapHttpEventToLoadingCount$() {
return tap(event => this.updateLoadingCounter(RegistryLoadingInterceptor.mapEventTypeToLoading(event)));
}
updateLoadingState(requestId, isLoading) {
this.loadingDictionary.set(requestId, isLoading);
this.stateChangeTrigger$.next(true);
}
updateLoadingCounter(isLoading) {
isLoading ? this.incrementCounter() : this.decrementCounter();
}
getRequestId(request) {
return this.requestIdGenerator.createId(request);
}
incrementCounter() {
this.networkRequestCounter$.next(this.networkRequestCounter$.value + 1);
}
decrementCounter() {
this.networkRequestCounter$.next(this.networkRequestCounter$.value - 1);
}
}
RegistryLoadingInterceptor.ɵprov = i0.ɵɵdefineInjectable({ factory: function RegistryLoadingInterceptor_Factory() { return new RegistryLoadingInterceptor(i0.ɵɵinject(i1.REQUEST_ID_GENERATOR), i0.ɵɵinject(i2.REQUEST_FILTER)); }, token: RegistryLoadingInterceptor, providedIn: "root" });
RegistryLoadingInterceptor.decorators = [
{ type: Injectable, args: [{ providedIn: 'root' },] }
];
RegistryLoadingInterceptor.ctorParameters = () => [
{ type: undefined, decorators: [{ type: Inject, args: [REQUEST_ID_GENERATOR,] }] },
{ type: undefined, decorators: [{ type: Inject, args: [REQUEST_FILTER,] }] }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnktbG9hZGluZy5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlZ2lzdHJ5LWxvYWRpbmctaW50ZXJjZXB0b3Ivc3JjL2xpYi9pbnRlcmNlcHRvcnMvcmVnaXN0cnktbG9hZGluZy5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUMsZUFBZSxFQUFjLEVBQUUsRUFBb0IsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRW5GLE9BQU8sRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFFN0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1DQUFtQyxDQUFDOzs7O0FBSWpFLE1BQU0sT0FBTywwQkFBMEI7SUFlckMsWUFDaUQsa0JBQThDLEVBQ3BELGFBQW9DO1FBRDlCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBNEI7UUFDcEQsa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBRzdFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CO2FBQzFDLFlBQVksRUFBRTthQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFB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QyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQzs7OztZQXRHRixVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7NENBaUIzQixNQUFNLFNBQUMsb0JBQW9COzRDQUMzQixNQUFNLFNBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mLCBPcGVyYXRvckZ1bmN0aW9uLCB0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcbmltcG9ydCB7TG9hZGluZ0RpY3Rpb25hcnl9IGZyb20gXCIuLi90eXBlcy9sb2FkaW5nLWRpY3Rpb25hcnlcIjtcbmltcG9ydCB7Y2F0Y2hFcnJvciwgZmluYWxpemUsIG1hcCwgc3dpdGNoTWFwLCB0YXB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHtSRVFVRVNUX0lEX0dFTkVSQVRPUn0gZnJvbSBcIi4uL3Rva2Vucy9yZXF1ZXN0LWlkLWdlbmVyYXRvci1zdHJhdGVneVwiO1xuaW1wb3J0IHtSZXF1ZXN0SWRHZW5lcmF0b3JTdHJhdGVneX0gZnJvbSBcIi4uL2ludGVyZmFjZXMvcmVxdWVzdC1pZC1nZW5lcmF0b3Itc3RyYXRlZ3lcIjtcbmltcG9ydCB7UkVRVUVTVF9GSUxURVJ9IGZyb20gXCIuLi90b2tlbnMvcmVxdWVzdC1maWx0ZXItc3RyYXRlZ3lcIjtcbmltcG9ydCB7UmVxdWVzdEZpbHRlclN0cmF0ZWd5fSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9yZXF1ZXN0LWZpbHRlci1zdHJhdGVneVwiO1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBSZWdpc3RyeUxvYWRpbmdJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG5cbiAgLyoqXG4gICAqIHJlZ2lzdHJ5IGV4cG9zaW5nIHRoZSBsb2FkaW5nIHN0YXRlIG9mIHdhdGNoZWQgaHR0cCByZXF1ZXN0c1xuICAgKi9cbiAgcHVibGljIGxvYWRpbmdTdGF0ZSQ6IE9ic2VydmFibGU8TG9hZGluZ0RpY3Rpb25hcnk+O1xuICAvKipcbiAgICogIG1vbml0b3JzIGlmIGFueSBodHRwIHJlcXVlc3QgaXMgbG9hZGluZyBieSBjb3VudGluZyByZWZlcmVuY2VzLlxuICAgKi9cbiAgcHVibGljIGlzQW55UmVxdWVzdExvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9hZGluZ0RpY3Rpb25hcnk6IExvYWRpbmdEaWN0aW9uYXJ5O1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlQ2hhbmdlVHJpZ2dlciQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBuZXR3b3JrUmVxdWVzdENvdW50ZXIkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChSRVFVRVNUX0lEX0dFTkVSQVRPUikgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0SWRHZW5lcmF0b3I6IFJlcXVlc3RJZEdlbmVyYXRvclN0cmF0ZWd5LFxuICAgIEBJbmplY3QoUkVRVUVTVF9GSUxURVIpIHByaXZhdGUgcmVhZG9ubHkgcmVxdWVzdEZpbHRlcjogUmVxdWVzdEZpbHRlclN0cmF0ZWd5XG4gICkge1xuXG4gICAgdGhpcy5sb2FkaW5nRGljdGlvbmFyeSA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlVHJpZ2dlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLm5ldHdvcmtSZXF1ZXN0Q291bnRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgdGhpcy5sb2FkaW5nU3RhdGUkID0gdGhpcy5zdGF0ZUNoYW5nZVRyaWdnZXIkXG4gICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgIC5waXBlKHN3aXRjaE1hcCgoKSA9PiBvZih0aGlzLmxvYWRpbmdEaWN0aW9uYXJ5KSkpO1xuXG4gICAgdGhpcy5pc0FueVJlcXVlc3RMb2FkaW5nJCA9IHRoaXMubmV0d29ya1JlcXVlc3RDb3VudGVyJFxuICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAucGlwZShtYXAoY291bnQgPT4gY291bnQgPiAwKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtYXBFdmVudFR5cGVUb0xvYWRpbmcoZXZlbnQ6IEh0dHBFdmVudDxhbnk+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGV2ZW50Py50eXBlID09PSAwO1xuICB9XG5cbiAgcHVibGljIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPiwgZGVsZWdhdGU6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8dW5rbm93bj4+IHtcbiAgICBsZXQgcmVxdWVzdENhbmNlbGxlZCA9IHRydWU7XG4gICAgcmV0dXJuIGRlbGVnYXRlLmhhbmRsZShyZXF1ZXN0KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoZXZlbnQ6IEh0dHBFdmVudDxhbnk+KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50Py50eXBlID09PSA0KSB7XG4gICAgICAgICAgICByZXF1ZXN0Q2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBldmVudDtcbiAgICAgICAgfSksXG4gICAgICAgIHRoaXMubWFwSHR0cEV2ZW50VG9Mb2FkaW5nQ291bnQkKCksXG4gICAgICAgIHRoaXMubWFwSHR0cEV2ZW50VG9Mb2FkaW5nU3RhdGUkKHJlcXVlc3QpLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICByZXF1ZXN0Q2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy51cGRhdGVMb2FkaW5nQ291bnRlcihmYWxzZSk7XG4gICAgICAgICAgaWYoIXRoaXMucmVxdWVzdEZpbHRlci5leGNsdWRlKHJlcXVlc3QpKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvYWRpbmdTdGF0ZSh0aGlzLmdldFJlcXVlc3RJZChyZXF1ZXN0KSwgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHJlcXVlc3RDYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVjcmVtZW50Q291bnRlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBFdmVudFRvTG9hZGluZ1N0YXRlJChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPik6IE9wZXJhdG9yRnVuY3Rpb248SHR0cEV2ZW50PGFueT4sIEh0dHBFdmVudDxhbnk+PiB7XG4gICAgaWYgKHRoaXMucmVxdWVzdEZpbHRlci5leGNsdWRlKHJlcXVlc3QpKSB7XG4gICAgICByZXR1cm4gdGFwKCk7XG4gICAgfVxuICAgIHJldHVybiB0YXAoZXZlbnQgPT5cbiAgICAgIHRoaXMudXBkYXRlTG9hZGluZ1N0YXRlKFxuICAgICAgICB0aGlzLmdldFJlcXVlc3RJZChyZXF1ZXN0KSxcbiAgICAgICAgUmVnaXN0cnlMb2FkaW5nSW50ZXJjZXB0b3IubWFwRXZlbnRUeXBlVG9Mb2FkaW5nKGV2ZW50KVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBFdmVudFRvTG9hZGluZ0NvdW50JCgpOiBPcGVyYXRvckZ1bmN0aW9uPEh0dHBFdmVudDxhbnk+LCBIdHRwRXZlbnQ8YW55Pj4ge1xuICAgIHJldHVybiB0YXAoZXZlbnQgPT5cbiAgICAgIHRoaXMudXBkYXRlTG9hZGluZ0NvdW50ZXIoUmVnaXN0cnlMb2FkaW5nSW50ZXJjZXB0b3IubWFwRXZlbnRUeXBlVG9Mb2FkaW5nKGV2ZW50KSlcbiAgICApXG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxvYWRpbmdTdGF0ZShyZXF1ZXN0SWQ6IHN0cmluZywgaXNMb2FkaW5nOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkaW5nRGljdGlvbmFyeS5zZXQocmVxdWVzdElkLCBpc0xvYWRpbmcpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VUcmlnZ2VyJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMb2FkaW5nQ291bnRlcihpc0xvYWRpbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpc0xvYWRpbmcgPyB0aGlzLmluY3JlbWVudENvdW50ZXIoKSA6IHRoaXMuZGVjcmVtZW50Q291bnRlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXF1ZXN0SWQocmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RJZEdlbmVyYXRvci5jcmVhdGVJZChyZXF1ZXN0KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5jcmVtZW50Q291bnRlcigpOiB2b2lkIHtcbiAgICB0aGlzLm5ldHdvcmtSZXF1ZXN0Q291bnRlciQubmV4dCh0aGlzLm5ldHdvcmtSZXF1ZXN0Q291bnRlciQudmFsdWUgKyAxKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVjcmVtZW50Q291bnRlcigpOiB2b2lkIHtcbiAgICB0aGlzLm5ldHdvcmtSZXF1ZXN0Q291bnRlciQubmV4dCh0aGlzLm5ldHdvcmtSZXF1ZXN0Q291bnRlciQudmFsdWUgLSAxKTtcbiAgfVxufVxuIl19