diff --git a/frontend/projects/ui/src/app/pages/apps-routes/app-list/package-info.pipe.ts b/frontend/projects/ui/src/app/pages/apps-routes/app-list/package-info.pipe.ts index df48680af..c0d00c2c9 100644 --- a/frontend/projects/ui/src/app/pages/apps-routes/app-list/package-info.pipe.ts +++ b/frontend/projects/ui/src/app/pages/apps-routes/app-list/package-info.pipe.ts @@ -1,6 +1,6 @@ import { Pipe, PipeTransform } from '@angular/core' import { Observable, combineLatest, firstValueFrom } from 'rxjs' -import { map } from 'rxjs/operators' +import { filter, map } from 'rxjs/operators' import { DataModel } from 'src/app/services/patch-db/data-model' import { getPackageInfo, PkgInfo } from '../../../util/get-package-info' import { PatchDB } from 'patch-db-client' @@ -17,7 +17,7 @@ export class PackageInfoPipe implements PipeTransform { transform(pkgId: string): Observable { return combineLatest([ - this.patch.watch$('package-data', pkgId), + this.patch.watch$('package-data', pkgId).pipe(filter(Boolean)), this.depErrorService.getPkgDepErrors$(pkgId), ]).pipe(map(([pkg, depErrors]) => getPackageInfo(pkg, depErrors))) } diff --git a/frontend/projects/ui/src/app/services/api/embassy-api.service.ts b/frontend/projects/ui/src/app/services/api/embassy-api.service.ts index 2a10bc473..7dd234969 100644 --- a/frontend/projects/ui/src/app/services/api/embassy-api.service.ts +++ b/frontend/projects/ui/src/app/services/api/embassy-api.service.ts @@ -1,4 +1,4 @@ -import { BehaviorSubject, Observable } from 'rxjs' +import { Observable, Subject } from 'rxjs' import { Update } from 'patch-db-client' import { RR } from './api.types' import { DataModel } from 'src/app/services/patch-db/data-model' @@ -6,7 +6,7 @@ import { Log } from '@start9labs/shared' import { WebSocketSubjectConfig } from 'rxjs/webSocket' export abstract class ApiService { - readonly patchStream$ = new BehaviorSubject[]>([]) + readonly patchStream$ = new Subject[]>() // http diff --git a/frontend/projects/ui/src/app/services/api/embassy-mock-api.service.ts b/frontend/projects/ui/src/app/services/api/embassy-mock-api.service.ts index c8c1a1f22..5f11b085f 100644 --- a/frontend/projects/ui/src/app/services/api/embassy-mock-api.service.ts +++ b/frontend/projects/ui/src/app/services/api/embassy-mock-api.service.ts @@ -26,7 +26,8 @@ import { interval, map, Observable, - ReplaySubject, + shareReplay, + Subject, switchMap, tap, timer, @@ -50,8 +51,8 @@ const PROGRESS: InstallProgress = { @Injectable() export class MockApiService extends ApiService { - readonly mockWsSource$ = new ReplaySubject>() - private readonly revertTime = 2000 + readonly mockWsSource$ = new Subject>() + private readonly revertTime = 1800 sequence = 0 constructor( @@ -149,7 +150,6 @@ export class MockApiService extends ApiService { async echo(params: RR.EchoReq, url?: string): Promise { if (url) { const num = Math.floor(Math.random() * 10) + 1 - console.warn(num) if (num > 8) return params.message throw new Error() } @@ -158,7 +158,9 @@ export class MockApiService extends ApiService { } openPatchWebsocket$(): Observable> { - return this.mockWsSource$ + return this.mockWsSource$.pipe( + shareReplay({ bufferSize: 1, refCount: true }), + ) } openLogsWebsocket$(config: WebSocketSubjectConfig): Observable { diff --git a/frontend/projects/ui/src/app/services/api/mock-patch.ts b/frontend/projects/ui/src/app/services/api/mock-patch.ts index 90044705c..f533a566e 100644 --- a/frontend/projects/ui/src/app/services/api/mock-patch.ts +++ b/frontend/projects/ui/src/app/services/api/mock-patch.ts @@ -2,7 +2,6 @@ import { DataModel, DockerIoFormat, HealthResult, - Manifest, PackageMainStatus, PackageState, } from 'src/app/services/patch-db/data-model' diff --git a/frontend/projects/ui/src/app/services/dep-error.service.ts b/frontend/projects/ui/src/app/services/dep-error.service.ts index 1b1880f72..1ba4f11a9 100644 --- a/frontend/projects/ui/src/app/services/dep-error.service.ts +++ b/frontend/projects/ui/src/app/services/dep-error.service.ts @@ -1,14 +1,6 @@ import { Injectable } from '@angular/core' import { Emver } from '@start9labs/shared' -import { - distinctUntilChanged, - filter, - map, - pairwise, - shareReplay, - startWith, - tap, -} from 'rxjs/operators' +import { distinctUntilChanged, map, shareReplay } from 'rxjs/operators' import { PatchDB } from 'patch-db-client' import { DataModel, @@ -43,7 +35,7 @@ export class DepErrorService { ), ), distinctUntilChanged(deepEqual), - shareReplay(1), + shareReplay({ bufferSize: 1, refCount: true }), ) constructor( diff --git a/frontend/projects/ui/src/app/services/marketplace.service.ts b/frontend/projects/ui/src/app/services/marketplace.service.ts index 47ca8f428..9592e7da1 100644 --- a/frontend/projects/ui/src/app/services/marketplace.service.ts +++ b/frontend/projects/ui/src/app/services/marketplace.service.ts @@ -77,7 +77,7 @@ export class MarketplaceService implements AbstractMarketplaceService { map(({ 'selected-url': url, 'known-hosts': hosts }) => toStoreIdentity(url, hosts[url]), ), - shareReplay(1), + shareReplay({ bufferSize: 1, refCount: true }), ) private readonly marketplace$ = this.knownHosts$.pipe( @@ -105,7 +105,7 @@ export class MarketplaceService implements AbstractMarketplaceService { }, {}, ), - shareReplay(1), + shareReplay({ bufferSize: 1, refCount: true }), ) private readonly filteredMarketplace$ = combineLatest([ diff --git a/frontend/projects/ui/src/app/services/patch-monitor.service.ts b/frontend/projects/ui/src/app/services/patch-monitor.service.ts index ac395798d..cafb9f0fe 100644 --- a/frontend/projects/ui/src/app/services/patch-monitor.service.ts +++ b/frontend/projects/ui/src/app/services/patch-monitor.service.ts @@ -13,13 +13,9 @@ import { LocalStorageBootstrap } from './patch-db/local-storage-bootstrap' export class PatchMonitorService extends Observable { // @TODO not happy with Observable private readonly stream$ = this.authService.isVerified$.pipe( - tap(verified => { - if (verified) { - this.patch.start(this.bootstrapper) - } else { - this.patch.stop() - } - }), + tap(verified => + verified ? this.patch.start(this.bootstrapper) : this.patch.stop(), + ), ) constructor( diff --git a/frontend/projects/ui/src/app/services/time-service.ts b/frontend/projects/ui/src/app/services/time-service.ts index 2f0193da4..355a671ff 100644 --- a/frontend/projects/ui/src/app/services/time-service.ts +++ b/frontend/projects/ui/src/app/services/time-service.ts @@ -18,11 +18,7 @@ import { combineLatest, from, timer } from 'rxjs' export class TimeService { private readonly startTimeMs$ = this.patch .watch$('server-info', 'system-start-time') - .pipe( - take(1), - map(startTime => new Date(startTime).valueOf()), - shareReplay(), - ) + .pipe(map(startTime => new Date(startTime).valueOf())) readonly systemTime$ = from(this.apiService.getSystemTime({})).pipe( switchMap(utcStr => {