From 7a2578cb550a228f631cfc114d12016c25cbaa73 Mon Sep 17 00:00:00 2001 From: voc0der Date: Tue, 24 Feb 2026 18:38:18 -0500 Subject: [PATCH] Fix HTTP interceptor callbacks running outside Angular zone --- src/app/http.interceptor.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/app/http.interceptor.ts b/src/app/http.interceptor.ts index dd12982..038767c 100644 --- a/src/app/http.interceptor.ts +++ b/src/app/http.interceptor.ts @@ -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(source$: Observable, ngZone: NgZone): Observable { + return new Observable((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),