OpenProject is the leading open source project management software.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
openproject/frontend/app/helpers/angular-rx-utils.ts

31 lines
828 B

import IScope = angular.IScope;
import {Observable, Observer} from "rxjs";
export function runInScopeDigest(scope: IScope, fn: () => void) {
if (scope.$root.$$phase !== "$apply" && scope.$root.$$phase !== "$digest") {
scope.$apply(fn);
} else {
fn();
}
}
export function scopedObservable<T>(scope: IScope, observable: Observable<T>): Observable<T> {
return Observable.create((observer: Observer<T>) => {
var disposable = observable.subscribe(
value => {
runInScopeDigest(scope, () => observer.next(value));
},
exception => {
runInScopeDigest(scope, () => observer.error(exception));
},
() => {
runInScopeDigest(scope, () => observer.complete());
}
);
scope.$on("$destroy", () => {
return disposable.unsubscribe();
});
});
}