From 64b087a78ee0d7f3fe75ee7d747bc6b824d5604d Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 7 Jul 2021 15:28:40 -0600 Subject: [PATCH] re-introduce watch --- .../app/components/status/status.component.ts | 20 +++++++++---------- ui/src/app/guards/unmaintenance.guard.ts | 7 +++---- ui/src/app/pipes/display-bulb.pipe.ts | 13 +++++++----- ui/src/app/pipes/status.pipe.ts | 13 +++++++----- 4 files changed, 29 insertions(+), 24 deletions(-) diff --git a/ui/src/app/components/status/status.component.ts b/ui/src/app/components/status/status.component.ts index 5c2396dc7..a1dbac4da 100644 --- a/ui/src/app/components/status/status.component.ts +++ b/ui/src/app/components/status/status.component.ts @@ -1,5 +1,5 @@ import { Component, Input } from '@angular/core' -import { PackageDataEntry } from 'src/app/services/patch-db/data-model' +import { combineLatest } from 'rxjs' import { PatchDbModel } from 'src/app/services/patch-db/patch-db.service' import { renderPkgStatus } from 'src/app/services/pkg-status-rendering.service' @@ -24,8 +24,15 @@ export class StatusComponent { ngOnInit () { this.subs = [ - this.patch.sequence$.subscribe(_ => { - this.render(this.patch.data['package-data'][this.pkgId]) + combineLatest([ + this.patch.watch$('package-data', this.pkgId, 'state'), + this.patch.watch$('package-data', this.pkgId, 'installed', 'status'), + ]) + .subscribe(([state, status]) => { + const { display, color, showDots } = renderPkgStatus(state, status) + this.display = display + this.color = color + this.showDots = showDots }), ] } @@ -33,12 +40,5 @@ export class StatusComponent { ngOnDestroy () { this.subs.forEach(sub => sub.unsubscribe()) } - - private render (pkg: PackageDataEntry) { - const { display, color, showDots } = renderPkgStatus(pkg.state, pkg.installed.status) - this.display = display - this.color = color - this.showDots = showDots - } } diff --git a/ui/src/app/guards/unmaintenance.guard.ts b/ui/src/app/guards/unmaintenance.guard.ts index 5be0a6049..8abc33a03 100644 --- a/ui/src/app/guards/unmaintenance.guard.ts +++ b/ui/src/app/guards/unmaintenance.guard.ts @@ -14,10 +14,9 @@ export class UnmaintenanceGuard implements CanActivate { private readonly router: Router, private readonly patch: PatchDbModel, ) { - this.patch.watch$('server-info', 'status') - .pipe( - tap(status => this.serverStatus = status), - ).subscribe() + this.patch.sequence$.subscribe(_ => { + this.serverStatus = this.patch.data['server-info'].status + }) } canActivate (): boolean { diff --git a/ui/src/app/pipes/display-bulb.pipe.ts b/ui/src/app/pipes/display-bulb.pipe.ts index 0a511c171..6457360ef 100644 --- a/ui/src/app/pipes/display-bulb.pipe.ts +++ b/ui/src/app/pipes/display-bulb.pipe.ts @@ -1,5 +1,5 @@ import { Pipe, PipeTransform } from '@angular/core' -import { Observable } from 'rxjs' +import { combineLatest, Observable } from 'rxjs' import { map } from 'rxjs/operators' import { PatchDbModel } from '../services/patch-db/patch-db.service' import { renderPkgStatus } from '../services/pkg-status-rendering.service' @@ -14,11 +14,14 @@ export class DisplayBulbPipe implements PipeTransform { ) { } transform (pkgId: string, bulb: DisplayBulb, connected: boolean): Observable { - return this.patch.sequence$.pipe( - map(_ => { + return combineLatest([ + this.patch.watch$('package-data', pkgId, 'state'), + this.patch.watch$('package-data', pkgId, 'installed', 'status'), + ]) + .pipe( + map(([state, status]) => { if (!connected) return bulb === 'off' - const pkg = this.patch.data['package-data'][pkgId] - const { color } = renderPkgStatus(pkg.state, pkg.installed.status) + const { color } = renderPkgStatus(state, status) switch (color) { case 'danger': return bulb === 'red' case 'success': return bulb === 'green' diff --git a/ui/src/app/pipes/status.pipe.ts b/ui/src/app/pipes/status.pipe.ts index 9586de65d..38a6ea55d 100644 --- a/ui/src/app/pipes/status.pipe.ts +++ b/ui/src/app/pipes/status.pipe.ts @@ -1,5 +1,5 @@ import { Pipe, PipeTransform } from '@angular/core' -import { Observable } from 'rxjs' +import { combineLatest, Observable } from 'rxjs' import { map } from 'rxjs/operators' import { PatchDbModel } from '../services/patch-db/patch-db.service' import { FEStatus, renderPkgStatus } from '../services/pkg-status-rendering.service' @@ -14,10 +14,13 @@ export class StatusPipe implements PipeTransform { ) { } transform (pkgId: string): Observable { - return this.patch.sequence$.pipe( - map(_ => { - const pkg = this.patch.data['package-data'][pkgId] - return renderPkgStatus(pkg.state, pkg.installed.status).feStatus + return combineLatest([ + this.patch.watch$('package-data', pkgId, 'state'), + this.patch.watch$('package-data', pkgId, 'installed', 'status'), + ]) + .pipe( + map(([state, status]) => { + return renderPkgStatus(state, status).feStatus }), ) }