Fix HTTP interceptor callbacks running outside Angular zone

pull/1163/head
voc0der 2 months ago
parent f36f292568
commit 7a2578cb55

@ -1,16 +1,29 @@
import { HttpErrorResponse, HttpInterceptorFn } from '@angular/common/http';
import { inject } from '@angular/core';
import { inject, NgZone } from '@angular/core';
import { MatSnackBar } from '@angular/material/snack-bar';
import { Router } from '@angular/router';
import { throwError } from 'rxjs';
import { Observable, throwError } from 'rxjs';
import { catchError, tap } from 'rxjs/operators';
import { diagEvent, diagHttpCallback } from './diagnostics';
function runInAngularZone<T>(source$: Observable<T>, ngZone: NgZone): Observable<T> {
return new Observable<T>((subscriber) => {
const subscription = source$.subscribe({
next: (value) => ngZone.run(() => subscriber.next(value)),
error: (error) => ngZone.run(() => subscriber.error(error)),
complete: () => ngZone.run(() => subscriber.complete())
});
return () => subscription.unsubscribe();
});
}
export const h401InterceptorFn: HttpInterceptorFn = (request, next) => {
const router = inject(Router);
const snackBar = inject(MatSnackBar);
const ngZone = inject(NgZone);
return next(request).pipe(
return runInAngularZone(next(request), ngZone).pipe(
tap({
next: () => diagHttpCallback('next', request.method, request.urlWithParams),
error: () => diagHttpCallback('error', request.method, request.urlWithParams),

Loading…
Cancel
Save