@anexia/ngx-loading-tools
Version:
This library provides a toolset for common loading state management, by providing hackable Loading Strategies and a Http Interceptor.
69 lines • 10.5 kB
JavaScript
import { Inject, Injectable } from '@angular/core';
import { throwError } from 'rxjs';
import { LOADING_STRATEGY } from '../tokens/loading-strategy';
import { catchError, finalize, tap } from 'rxjs/operators';
import { INSPECT_LOADING_INTERCEPTOR } from "../tokens/inspect-loading-strategy";
import * as i0 from "@angular/core";
export class WebServiceLoadingInterceptor {
constructor(strategies, inspectLoadingInterceptor) {
this.strategies = strategies;
this.inspectLoadingInterceptor = inspectLoadingInterceptor;
}
intercept(request, delegate) {
if (!this.strategies) {
return delegate.handle(request);
}
// run loading strategy matcher against request
const matchingStrategies = this.strategies.filter(matchStrategy => matchStrategy.matcher.match(request));
if (this.inspectLoadingInterceptor) {
console.log(request, matchingStrategies, this.strategies);
}
// if no loading strategy matches
if (matchingStrategies.length === 0) {
return delegate.handle(request);
}
let requestCancelled = true;
return delegate.handle(request).pipe(tap((httpEvent) => {
if (this.inspectLoadingInterceptor) {
console.log(httpEvent, request, matchingStrategies);
}
if ((httpEvent === null || httpEvent === void 0 ? void 0 : httpEvent.type) === 4) {
requestCancelled = false;
this.stopStrategies(matchingStrategies, request);
}
if ((httpEvent === null || httpEvent === void 0 ? void 0 : httpEvent.type) === 0) {
matchingStrategies.forEach(matchingStrategy => matchingStrategy.handler.start(request));
}
}), catchError(error => {
if (this.inspectLoadingInterceptor) {
console.error(error, request, matchingStrategies);
}
requestCancelled = false;
this.stopStrategies(matchingStrategies, request);
return throwError(error);
}), finalize(() => {
if (this.inspectLoadingInterceptor) {
console.log('finalize', request, matchingStrategies);
}
if (requestCancelled) {
this.stopStrategies(matchingStrategies, request);
}
}));
}
stopStrategies(matchingStrategies, request) {
matchingStrategies.forEach(matchingStrategy => matchingStrategy.handler.stop(request));
}
}
WebServiceLoadingInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.3", ngImport: i0, type: WebServiceLoadingInterceptor, deps: [{ token: LOADING_STRATEGY }, { token: INSPECT_LOADING_INTERCEPTOR }], target: i0.ɵɵFactoryTarget.Injectable });
WebServiceLoadingInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.3", ngImport: i0, type: WebServiceLoadingInterceptor, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.3", ngImport: i0, type: WebServiceLoadingInterceptor, decorators: [{
type: Injectable,
args: [{ providedIn: 'root' }]
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
type: Inject,
args: [LOADING_STRATEGY]
}] }, { type: undefined, decorators: [{
type: Inject,
args: [INSPECT_LOADING_INTERCEPTOR]
}] }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLXNlcnZpY2UtbG9hZGluZy5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1sb2FkaW5nLXRvb2xzL3NyYy9saWIvaW50ZXJjZXB0b3JzL3dlYi1zZXJ2aWNlLWxvYWRpbmcuaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFhLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFJL0UsTUFBTSxPQUFPLDRCQUE0QjtJQUN2QyxZQUM2QyxVQUE2QixFQUNsQix5QkFBa0M7UUFEN0MsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFDbEIsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUFTO0lBRTFGLENBQUM7SUFFTSxTQUFTLENBQUMsT0FBNkIsRUFBRSxRQUFxQjtRQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDakM7UUFDRCwrQ0FBK0M7UUFDL0MsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFekcsSUFBSSxJQUFJLENBQUMseUJBQXlCLEVBQUU7WUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzNEO1FBRUQsaUNBQWlDO1FBQ2pDLElBQUksa0JBQWtCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNuQyxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDakM7UUFFRCxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM1QixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUNsQyxHQUFHLENBQUMsQ0FBQyxTQUF5QixFQUFFLEVBQUU7WUFDaEMsSUFBSSxJQUFJLENBQUMseUJBQXlCLEVBQUU7Z0JBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2FBQ3JEO1lBQ0QsSUFBRyxDQUFBLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxJQUFJLE1BQUssQ0FBQyxFQUFFO2dCQUN4QixnQkFBZ0IsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDbEQ7WUFFRCxJQUFHLENBQUEsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLElBQUksTUFBSyxDQUFDLEVBQUU7Z0JBQ3hCLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ3pGO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFO2dCQUNsQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQzthQUNuRDtZQUNELGdCQUFnQixHQUFHLEtBQUssQ0FBQztZQUN6QixJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxFQUNGLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRTtnQkFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUM7YUFDdEQ7WUFDRCxJQUFHLGdCQUFnQixFQUFFO2dCQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ2xEO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTyxjQUFjLENBQUMsa0JBQXFDLEVBQUUsT0FBeUI7UUFDckYsa0JBQWtCLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDekYsQ0FBQzs7eUhBM0RVLDRCQUE0QixrQkFFN0IsZ0JBQWdCLGFBQ2hCLDJCQUEyQjs2SEFIMUIsNEJBQTRCLGNBRGhCLE1BQU07MkZBQ2xCLDRCQUE0QjtrQkFEeEMsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7OzBCQUczQixNQUFNOzJCQUFDLGdCQUFnQjs7MEJBQ3ZCLE1BQU07MkJBQUMsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwRXZlbnQsIEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgdGhyb3dFcnJvcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0xPQURJTkdfU1RSQVRFR1l9IGZyb20gJy4uL3Rva2Vucy9sb2FkaW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgZmluYWxpemUsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtJTlNQRUNUX0xPQURJTkdfSU5URVJDRVBUT1J9IGZyb20gXCIuLi90b2tlbnMvaW5zcGVjdC1sb2FkaW5nLXN0cmF0ZWd5XCI7XG5pbXBvcnQge0xvYWRpbmdTdHJhdGVnaWVzfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9sb2FkaW5nLXN0cmF0ZWd5XCI7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFdlYlNlcnZpY2VMb2FkaW5nSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChMT0FESU5HX1NUUkFURUdZKSBwcml2YXRlIHJlYWRvbmx5IHN0cmF0ZWdpZXM6IExvYWRpbmdTdHJhdGVnaWVzLFxuICAgIEBJbmplY3QoSU5TUEVDVF9MT0FESU5HX0lOVEVSQ0VQVE9SKSBwcml2YXRlIHJlYWRvbmx5IGluc3BlY3RMb2FkaW5nSW50ZXJjZXB0b3I6IGJvb2xlYW5cbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBkZWxlZ2F0ZTogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICghdGhpcy5zdHJhdGVnaWVzKSB7XG4gICAgICByZXR1cm4gZGVsZWdhdGUuaGFuZGxlKHJlcXVlc3QpO1xuICAgIH1cbiAgICAvLyBydW4gbG9hZGluZyBzdHJhdGVneSBtYXRjaGVyIGFnYWluc3QgcmVxdWVzdFxuICAgIGNvbnN0IG1hdGNoaW5nU3RyYXRlZ2llcyA9IHRoaXMuc3RyYXRlZ2llcy5maWx0ZXIobWF0Y2hTdHJhdGVneSA9PiBtYXRjaFN0cmF0ZWd5Lm1hdGNoZXIubWF0Y2gocmVxdWVzdCkpO1xuXG4gICAgaWYgKHRoaXMuaW5zcGVjdExvYWRpbmdJbnRlcmNlcHRvcikge1xuICAgICAgY29uc29sZS5sb2cocmVxdWVzdCwgbWF0Y2hpbmdTdHJhdGVnaWVzLCB0aGlzLnN0cmF0ZWdpZXMpO1xuICAgIH1cblxuICAgIC8vIGlmIG5vIGxvYWRpbmcgc3RyYXRlZ3kgbWF0Y2hlc1xuICAgIGlmIChtYXRjaGluZ1N0cmF0ZWdpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZGVsZWdhdGUuaGFuZGxlKHJlcXVlc3QpO1xuICAgIH1cblxuICAgIGxldCByZXF1ZXN0Q2FuY2VsbGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gZGVsZWdhdGUuaGFuZGxlKHJlcXVlc3QpLnBpcGUoXG4gICAgICB0YXAoKGh0dHBFdmVudDogSHR0cEV2ZW50PGFueT4pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaW5zcGVjdExvYWRpbmdJbnRlcmNlcHRvcikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGh0dHBFdmVudCwgcmVxdWVzdCwgbWF0Y2hpbmdTdHJhdGVnaWVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZihodHRwRXZlbnQ/LnR5cGUgPT09IDQpIHtcbiAgICAgICAgICByZXF1ZXN0Q2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zdG9wU3RyYXRlZ2llcyhtYXRjaGluZ1N0cmF0ZWdpZXMsIHJlcXVlc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoaHR0cEV2ZW50Py50eXBlID09PSAwKSB7XG4gICAgICAgICAgbWF0Y2hpbmdTdHJhdGVnaWVzLmZvckVhY2gobWF0Y2hpbmdTdHJhdGVneSA9PiBtYXRjaGluZ1N0cmF0ZWd5LmhhbmRsZXIuc3RhcnQocmVxdWVzdCkpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICBpZiAodGhpcy5pbnNwZWN0TG9hZGluZ0ludGVyY2VwdG9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvciwgcmVxdWVzdCwgbWF0Y2hpbmdTdHJhdGVnaWVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0Q2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RvcFN0cmF0ZWdpZXMobWF0Y2hpbmdTdHJhdGVnaWVzLCByZXF1ZXN0KTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgfSksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmluc3BlY3RMb2FkaW5nSW50ZXJjZXB0b3IpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnZmluYWxpemUnLCByZXF1ZXN0LCBtYXRjaGluZ1N0cmF0ZWdpZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHJlcXVlc3RDYW5jZWxsZWQpIHtcbiAgICAgICAgICB0aGlzLnN0b3BTdHJhdGVnaWVzKG1hdGNoaW5nU3RyYXRlZ2llcywgcmVxdWVzdCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFN0cmF0ZWdpZXMobWF0Y2hpbmdTdHJhdGVnaWVzOiBMb2FkaW5nU3RyYXRlZ2llcywgcmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55Pik6IHZvaWQge1xuICAgIG1hdGNoaW5nU3RyYXRlZ2llcy5mb3JFYWNoKG1hdGNoaW5nU3RyYXRlZ3kgPT4gbWF0Y2hpbmdTdHJhdGVneS5oYW5kbGVyLnN0b3AocmVxdWVzdCkpO1xuICB9XG59XG4iXX0=