From 98816d648af41c423be4feb28adcd8801c9f2792 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 15 May 2020 14:55:32 +0200 Subject: [PATCH] packages/core: use BehaviorSubject in OAuthRequestManager --- .../OAuthRequestManager.ts | 24 +++++-------------- 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/packages/core/src/api/apis/implementations/OAuthRequestManager/OAuthRequestManager.ts b/packages/core/src/api/apis/implementations/OAuthRequestManager/OAuthRequestManager.ts index 02d89b9546..632ec059eb 100644 --- a/packages/core/src/api/apis/implementations/OAuthRequestManager/OAuthRequestManager.ts +++ b/packages/core/src/api/apis/implementations/OAuthRequestManager/OAuthRequestManager.ts @@ -21,8 +21,9 @@ import { AuthRequester, AuthRequesterOptions, } from '../../definitions'; -import Observable from 'zen-observable'; import { OAuthPendingRequests, PendingRequest } from './OAuthPendingRequests'; +import { BehaviorSubject } from '../lib'; +import { Observable } from '../../../types'; /** * The OAuthRequestManager is an implementation of the OAuthRequestApi. @@ -32,24 +33,10 @@ import { OAuthPendingRequests, PendingRequest } from './OAuthPendingRequests'; * them all together into a single request for each OAuth provider. */ export class OAuthRequestManager implements OAuthRequestApi { - private readonly request$: Observable; - private readonly observers = new Set< - ZenObservable.SubscriptionObserver - >(); + private readonly subject = new BehaviorSubject([]); private currentRequests: PendingAuthRequest[] = []; private handlerCount = 0; - constructor() { - this.request$ = new Observable((observer) => { - observer.next(this.currentRequests); - - this.observers.add(observer); - return () => { - this.observers.delete(observer); - }; - }).map((requests) => requests.filter(Boolean)); // Convert from sparse array to array of present items only - } - createAuthRequester(options: AuthRequesterOptions): AuthRequester { const handler = new OAuthPendingRequests(); @@ -66,7 +53,8 @@ export class OAuthRequestManager implements OAuthRequestApi { newRequests[index] = request; } this.currentRequests = newRequests; - this.observers.forEach((observer) => observer.next(newRequests)); + // Convert from sparse array to array of present items only + this.subject.next(newRequests.filter(Boolean)); }, }); @@ -100,7 +88,7 @@ export class OAuthRequestManager implements OAuthRequestApi { } authRequest$(): Observable { - return this.request$; + return this.subject; } async showLoginPopup(options: LoginPopupOptions): Promise {