From df8aac9739d2be6b123281baf974878992593c8a Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 15 May 2020 14:19:12 +0200 Subject: [PATCH] packages/core: use BehavorSubject in OAuthRequestManager --- .../OAuthPendingRequests.ts | 26 +++++++------------ 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/packages/core/src/api/apis/implementations/OAuthRequestManager/OAuthPendingRequests.ts b/packages/core/src/api/apis/implementations/OAuthRequestManager/OAuthPendingRequests.ts index 6348262022..96aada1864 100644 --- a/packages/core/src/api/apis/implementations/OAuthRequestManager/OAuthPendingRequests.ts +++ b/packages/core/src/api/apis/implementations/OAuthRequestManager/OAuthPendingRequests.ts @@ -14,8 +14,9 @@ * limitations under the License. */ -import Observable from 'zen-observable'; import { OAuthScopes } from '../../definitions'; +import { BehaviorSubject } from '../lib'; +import { Observable } from '../../../types'; type RequestQueueEntry = { scopes: OAuthScopes; @@ -44,16 +45,15 @@ export type OAuthPendingRequestsApi = { export class OAuthPendingRequests implements OAuthPendingRequestsApi { private requests: RequestQueueEntry[] = []; - private listeners: ZenObservable.SubscriptionObserver< - PendingRequest - >[] = []; + private subject = new BehaviorSubject>( + this.getCurrentPending(), + ); request(scopes: OAuthScopes): Promise { return new Promise((resolve, reject) => { this.requests.push({ scopes, resolve, reject }); - const pending = this.getCurrentPending(); - this.listeners.forEach((listener) => listener.next(pending)); + this.subject.next(this.getCurrentPending()); }); } @@ -66,26 +66,18 @@ export class OAuthPendingRequests return true; }); - const pending = this.getCurrentPending(); - this.listeners.forEach((listener) => listener.next(pending)); + this.subject.next(this.getCurrentPending()); } reject(error: Error) { this.requests.forEach((request) => request.reject(error)); this.requests = []; - const pending = this.getCurrentPending(); - this.listeners.forEach((listener) => listener.next(pending)); + this.subject.next(this.getCurrentPending()); } pending(): Observable> { - return new Observable((subscriber) => { - this.listeners.push(subscriber); - subscriber.next(this.getCurrentPending()); - return () => { - this.listeners = this.listeners.filter((l) => l !== subscriber); - }; - }); + return this.subject; } private getCurrentPending(): PendingRequest {