UNPKG

@cause-911/core

Version:

Run `npm install @cause-911/core --save` to add this library to your project

137 lines 12.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable, Injector } from '@angular/core'; import { HttpErrorResponse } from '@angular/common/http'; import { MatSnackBar } from '@angular/material'; import { throwError } from 'rxjs'; import { catchError, retryWhen, scan } from 'rxjs/operators'; import { CoreService } from '../../core.service'; export class HttpErrorInterceptor { /** * @param {?} injector */ constructor(injector) { this.config = injector.get(CoreService).getConfig(); try { this.snackBar = injector.get(MatSnackBar); } catch (e) { console.log(`No material snackbar can't be injected. You could "imports" the module "MatSnackBarModule" to use it.`); } } /** * @param {?} request * @param {?} next * @return {?} */ intercept(request, next) { return next.handle(request).pipe(retryWhen((/** * @param {?} errors * @return {?} */ (errors) => this.handleRetry(errors))), catchError((/** * @param {?} error * @return {?} */ (error) => this.handleError(error)))); } /** * @private * @param {?} errors * @return {?} */ handleRetry(errors) { return errors.pipe(scan((/** * @param {?} accumulator * @param {?} currentError * @param {?} errorCount * @return {?} */ (accumulator, currentError, errorCount) => { /** @type {?} */ const allowNewRetry = (this.config.nbRetryOnNetworkError > 0 && errorCount < this.config.nbRetryOnNetworkError); /** @type {?} */ const isNetworkError = [0, 408, 502, 503, 504].includes(currentError.status); if (allowNewRetry && isNetworkError) { return errorCount + 1; } else { throw currentError; } }), 0)); } /** * @private * @param {?} error * @return {?} */ handleError(error) { if (error instanceof HttpErrorResponse) { if (error.error instanceof ErrorEvent) { this.showError(error.error.message); } else if (error.status === 0) { this.showError('La demande ne peut être complétée.'); } else if (error.status === 400) { if (error.error) { this.showError(error.error.title ? error.error.title : error.error); } else if (error.statusText) { this.showError(`${error.status} ${error.statusText}`); } else { this.showError('La demande ne peut pas être complétée.'); } } else if (error.status === 404) { this.showError('Le URL demandé n\'existe pas.'); } else if (error.status === 500) { this.showError('Erreur de communication.'); } else if (error.status !== 200 && error.status !== 401) { this.showError(`Erreur : ${error.status} ${error.statusText}`); } } return throwError(error); } /** * @private * @param {?} message * @return {?} */ showError(message) { if (this.snackBar) { this.snackBar.open(message, '', { panelClass: ['error-snackbar'], duration: 5000 }); } else { window.alert(message); } } } HttpErrorInterceptor.decorators = [ { type: Injectable } ]; /** @nocollapse */ HttpErrorInterceptor.ctorParameters = () => [ { type: Injector } ]; if (false) { /** * @type {?} * @private */ HttpErrorInterceptor.prototype.snackBar; /** * @type {?} * @private */ HttpErrorInterceptor.prototype.config; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1lcnJvci1pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BjYXVzZS05MTEvY29yZS8iLCJzb3VyY2VzIjpbImxpYi9zaGFyZWQvaW50ZXJjZXB0b3IvaHR0cC1lcnJvci1pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFtQixpQkFBaUIsRUFBdUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHakQsTUFBTSxPQUFPLG9CQUFvQjs7OztJQUk3QixZQUNJLFFBQWtCO1FBRWxCLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVwRCxJQUFJO1lBQ0EsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzdDO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDUixPQUFPLENBQUMsR0FBRyxDQUFDLHVHQUF1RyxDQUFDLENBQUM7U0FDeEg7SUFDTCxDQUFDOzs7Ozs7SUFFTSxTQUFTLENBQ1osT0FBeUIsRUFDekIsSUFBaUI7UUFFakIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDNUIsU0FBUzs7OztRQUFDLENBQUMsTUFBdUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMs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LENBQUM7U0FDTjthQUFNO1lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN6QjtJQUNMLENBQUM7OztZQTdFSixVQUFVOzs7O1lBUlUsUUFBUTs7Ozs7OztJQVV6Qix3Q0FBOEI7Ozs7O0lBQzlCLHNDQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwSW50ZXJjZXB0b3IsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwRXZlbnQsIEh0dHBIYW5kbGVyLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgcmV0cnlXaGVuLCBzY2FuIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2NsYXNzZXMvY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBDb3JlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIdHRwRXJyb3JJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXI7XG4gICAgcHJpdmF0ZSBjb25maWc6IENvbmZpZ3VyYXRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gaW5qZWN0b3IuZ2V0KENvcmVTZXJ2aWNlKS5nZXRDb25maWcoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5zbmFja0JhciA9IGluamVjdG9yLmdldChNYXRTbmFja0Jhcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBObyBtYXRlcmlhbCBzbmFja2JhciBjYW4ndCBiZSBpbmplY3RlZC4gWW91IGNvdWxkIFwiaW1wb3J0c1wiIHRoZSBtb2R1bGUgXCJNYXRTbmFja0Jhck1vZHVsZVwiIHRvIHVzZSBpdC5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpbnRlcmNlcHQoXG4gICAgICAgIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sXG4gICAgICAgIG5leHQ6IEh0dHBIYW5kbGVyLFxuICAgICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpLnBpcGUoXG4gICAgICAgICAgICByZXRyeVdoZW4oKGVycm9yczogT2JzZXJ2YWJsZTxhbnk+KSA9PiB0aGlzLmhhbmRsZVJldHJ5KGVycm9ycykpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnJvcikpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVSZXRyeShlcnJvcnM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIHJldHVybiBlcnJvcnMucGlwZShcbiAgICAgICAgICAgIHNjYW4oKGFjY3VtdWxhdG9yOiBhbnksIGN1cnJlbnRFcnJvcjogYW55LCBlcnJvckNvdW50OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbGxvd05ld1JldHJ5ID0gKHRoaXMuY29uZmlnLm5iUmV0cnlPbk5ldHdvcmtFcnJvciA+IDAgJiYgZXJyb3JDb3VudCA8IHRoaXMuY29uZmlnLm5iUmV0cnlPbk5ldHdvcmtFcnJvcik7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNOZXR3b3JrRXJyb3IgPSBbMCwgNDA4LCA1MDIsIDUwMywgNTA0XS5pbmNsdWRlcyhjdXJyZW50RXJyb3Iuc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgIGlmIChhbGxvd05ld1JldHJ5ICYmIGlzTmV0d29ya0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvckNvdW50ICsgMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBjdXJyZW50RXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBhbnkpOiBPYnNlcnZhYmxlPG5ldmVyPiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IuZXJyb3IgaW5zdGFuY2VvZiBFcnJvckV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZXJyb3IuZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YXR1cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKCdMYSBkZW1hbmRlIG5lIHBldXQgw6p0cmUgY29tcGzDqXTDqWUuJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGVycm9yLmVycm9yLnRpdGxlID8gZXJyb3IuZXJyb3IudGl0bGUgOiBlcnJvci5lcnJvcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGF0dXNUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGAke2Vycm9yLnN0YXR1c30gJHtlcnJvci5zdGF0dXNUZXh0fWApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKCdMYSBkZW1hbmRlIG5lIHBldXQgcGFzIMOqdHJlIGNvbXBsw6l0w6llLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcignTGUgVVJMIGRlbWFuZMOpIG5cXCdleGlzdGUgcGFzLicpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGF0dXMgPT09IDUwMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKCdFcnJldXIgZGUgY29tbXVuaWNhdGlvbi4nKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhdHVzICE9PSAyMDAgJiYgZXJyb3Iuc3RhdHVzICE9PSA0MDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihgRXJyZXVyIDogJHtlcnJvci5zdGF0dXN9ICR7ZXJyb3Iuc3RhdHVzVGV4dH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dFcnJvcihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc25hY2tCYXIpIHtcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihtZXNzYWdlLCAnJywge1xuICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnZXJyb3Itc25hY2tiYXInXSxcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogNTAwMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3aW5kb3cuYWxlcnQobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=