diff --git a/libs/angular/src/utils/run-inside-angular.operator.ts b/libs/angular/src/utils/run-inside-angular.operator.ts new file mode 100644 index 00000000000..4e9b52b009c --- /dev/null +++ b/libs/angular/src/utils/run-inside-angular.operator.ts @@ -0,0 +1,21 @@ +import { NgZone } from "@angular/core"; +import { MonoTypeOperatorFunction, Observable } from "rxjs"; + +export function runInsideAngular(ngZone: NgZone): MonoTypeOperatorFunction { + return (source: Observable) => + new Observable((subscriber) => { + const subscription = source.subscribe({ + next(value) { + ngZone.run(() => subscriber.next(value)); + }, + error(error: unknown) { + ngZone.run(() => subscriber.error(error)); + }, + complete() { + ngZone.run(() => subscriber.complete()); + }, + }); + + return () => subscription.unsubscribe(); + }); +}