diff --git a/apps/client/src/app/services/internet-identity.service.ts b/apps/client/src/app/services/internet-identity.service.ts index 7d428c407..d000b079e 100644 --- a/apps/client/src/app/services/internet-identity.service.ts +++ b/apps/client/src/app/services/internet-identity.service.ts @@ -1,20 +1,22 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { Injectable, OnDestroy } from '@angular/core'; import { AuthClient } from '@dfinity/auth-client'; import { OAuthResponse } from '@ghostfolio/common/interfaces'; -import { EMPTY } from 'rxjs'; -import { catchError } from 'rxjs/operators'; +import { EMPTY, Subject } from 'rxjs'; +import { catchError, takeUntil } from 'rxjs/operators'; @Injectable({ providedIn: 'root' }) -export class InternetIdentityService { +export class InternetIdentityService implements OnDestroy { + private unsubscribeSubject = new Subject(); + public constructor(private http: HttpClient) {} public async login(): Promise { const authClient = await AuthClient.create(); - return await new Promise((resolve, reject) => { + return new Promise((resolve, reject) => { authClient.login({ onError: async () => { return reject(); @@ -30,7 +32,8 @@ export class InternetIdentityService { catchError(() => { reject(); return EMPTY; - }) + }), + takeUntil(this.unsubscribeSubject) ) .subscribe((response) => { resolve(response); @@ -39,4 +42,9 @@ export class InternetIdentityService { }); }); } + + public ngOnDestroy() { + this.unsubscribeSubject.next(); + this.unsubscribeSubject.complete(); + } }