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.

69 lines 10.5 kB
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=