From 440b8e6b829c099a499f4a80a4d6c27941178812 Mon Sep 17 00:00:00 2001 From: Dan Percic Date: Tue, 20 Sep 2022 15:15:23 +0300 Subject: [PATCH] RED-5224: get stat if doesn't exist --- src/lib/services/stats.service.ts | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/lib/services/stats.service.ts b/src/lib/services/stats.service.ts index ff88be8..6fb3eef 100644 --- a/src/lib/services/stats.service.ts +++ b/src/lib/services/stats.service.ts @@ -1,5 +1,5 @@ import { inject, Injectable } from '@angular/core'; -import { BehaviorSubject, Observable } from 'rxjs'; +import { BehaviorSubject, Observable, switchMap } from 'rxjs'; import { HttpClient } from '@angular/common/http'; import { tap } from 'rxjs/operators'; import { HeadersConfiguration, mapEach, RequiredParam, Validate } from '../utils'; @@ -43,7 +43,12 @@ export abstract class StatsService { } watch$(key: string): Observable { - return this._getBehaviourSubject(key).asObservable(); + const subject = this.#map.get(key); + if (!subject) { + return this.getFor([key]).pipe(switchMap(() => this._getBehaviourSubject(key).asObservable())); + } + + return subject.asObservable(); } private _pluckPrimaryKey(stats: E): string { @@ -53,7 +58,11 @@ export abstract class StatsService { } private _getBehaviourSubject(key: string): BehaviorSubject { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - return this.#map.get(key)!; + const subject = this.#map.get(key); + if (!subject) { + throw new Error(`No stats for key ${key}`); + } + + return subject; } }