From 40d47c9f445d1fda0c76a38317022d469350f448 Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 14 Sep 2022 11:24:22 -0600 Subject: [PATCH] fix duplicate patch updates, add scroll button to setup success (#1800) * fix duplicate patch updates, add scroll button to setup success * update path * update patch * update patch --- frontend/package.json | 4 +- .../src/app/pages/success/success.page.html | 21 ++++++++++- .../src/app/pages/success/success.page.ts | 29 ++++++++++++++- .../src/app/services/rpc-encrypted.service.ts | 7 ++-- .../apps-routes/app-show/app-show.page.html | 2 +- .../apps-routes/app-show/app-show.page.ts | 7 +--- .../app-show/pipes/to-dependencies.pipe.ts | 37 ++++--------------- .../services/api/embassy-mock-api.service.ts | 11 ++++-- .../app/services/patch-db/patch-db.factory.ts | 10 ++++- .../services/pkg-status-rendering.service.ts | 6 ++- patch-db | 2 +- 11 files changed, 86 insertions(+), 50 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index e5a1689b7..4af00e913 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -15,8 +15,8 @@ "build:setup-wizard": "ng run setup-wizard:build", "build:ui": "ng run ui:build", "build:all": "npm run build:deps && npm run build:diagnostic-ui && npm run build:setup-wizard && npm run build:ui", - "start:diagnostic-ui": "npm run-script build-config && ionic serve --project diagnostic-ui --host 0.0.0.0", - "start:setup-wizard": "npm run-script build-config && ionic serve --project setup-wizard --host 0.0.0.0", + "start:diagnostic": "npm run-script build-config && ionic serve --project diagnostic-ui --host 0.0.0.0", + "start:setup": "npm run-script build-config && ionic serve --project setup-wizard --host 0.0.0.0", "start:ui": "npm run-script build-config && ionic serve --project ui --ip --host 0.0.0.0", "start:ui:proxy": "npm run-script build-config && ionic serve --project ui --ip --host 0.0.0.0 -- --proxy-config proxy.conf.json", "build-config": "node build-config.js" diff --git a/frontend/projects/setup-wizard/src/app/pages/success/success.page.html b/frontend/projects/setup-wizard/src/app/pages/success/success.page.html index cecae06ab..bacc5d311 100644 --- a/frontend/projects/setup-wizard/src/app/pages/success/success.page.html +++ b/frontend/projects/setup-wizard/src/app/pages/success/success.page.html @@ -1,4 +1,4 @@ - + @@ -147,8 +147,27 @@

+
+ +
+ + More + + +
+ diff --git a/frontend/projects/setup-wizard/src/app/pages/success/success.page.ts b/frontend/projects/setup-wizard/src/app/pages/success/success.page.ts index bc0a16aba..a2374930f 100644 --- a/frontend/projects/setup-wizard/src/app/pages/success/success.page.ts +++ b/frontend/projects/setup-wizard/src/app/pages/success/success.page.ts @@ -1,6 +1,12 @@ import { DOCUMENT } from '@angular/common' -import { Component, EventEmitter, Inject, Output } from '@angular/core' -import { ToastController } from '@ionic/angular' +import { + Component, + EventEmitter, + Inject, + Output, + ViewChild, +} from '@angular/core' +import { IonContent, ToastController } from '@ionic/angular' import { copyToClipboard, DownloadHTMLService, @@ -15,8 +21,13 @@ import { StateService } from 'src/app/services/state.service' providers: [DownloadHTMLService], }) export class SuccessPage { + @ViewChild(IonContent) + private content?: IonContent + @Output() onDownload = new EventEmitter() + isOnBottom = true + constructor( @Inject(DOCUMENT) private readonly document: Document, private readonly toastCtrl: ToastController, @@ -38,6 +49,8 @@ export class SuccessPage { } async ngAfterViewInit() { + setTimeout(() => this.checkBottom(), 42) + try { await this.stateService.completeEmbassy() this.document @@ -88,4 +101,16 @@ export class SuccessPage { let html = this.document.getElementById('downloadable')?.innerHTML || '' this.downloadHtml.download('embassy-info.html', html) } + + checkBottom() { + const bottomDiv = document.getElementById('bottom-div') + console.error(bottomDiv) + this.isOnBottom = + !!bottomDiv && + bottomDiv.getBoundingClientRect().top - 192 < window.innerHeight + } + + scrollToBottom() { + this.content?.scrollToBottom(250) + } } diff --git a/frontend/projects/setup-wizard/src/app/services/rpc-encrypted.service.ts b/frontend/projects/setup-wizard/src/app/services/rpc-encrypted.service.ts index fc86b8462..5a18aca70 100644 --- a/frontend/projects/setup-wizard/src/app/services/rpc-encrypted.service.ts +++ b/frontend/projects/setup-wizard/src/app/services/rpc-encrypted.service.ts @@ -44,7 +44,7 @@ export class RPCEncryptedService { .then(res => JSON.parse(res)) .catch(e => { if (!e.status && !e.statusText) { - throw new EncryptionError() + throw new NetworkError() } else { throw new HttpError(e) } @@ -54,9 +54,10 @@ export class RPCEncryptedService { } } -class EncryptionError { +class NetworkError { readonly code = null - readonly message = 'Invalid Key' + readonly message = + 'Network Error. Please try refreshing the page or clearing your browser cache' readonly details = null } diff --git a/frontend/projects/ui/src/app/pages/apps-routes/app-show/app-show.page.html b/frontend/projects/ui/src/app/pages/apps-routes/app-show/app-show.page.html index f855475b4..7775dafe0 100644 --- a/frontend/projects/ui/src/app/pages/apps-routes/app-show/app-show.page.html +++ b/frontend/projects/ui/src/app/pages/apps-routes/app-show/app-show.page.html @@ -1,7 +1,7 @@ - + , private readonly navCtrl: NavController, private readonly modalService: ModalService, ) {} - transform(pkg: PackageDataEntry): Observable { - return combineLatest([ - this.patch.watch$( - 'package-data', - pkg.manifest.id, - 'installed', - 'current-dependencies', - ), - this.patch.watch$( - 'package-data', - pkg.manifest.id, - 'installed', - 'status', - 'dependency-errors', - ), - ]).pipe( - filter(deps => deps.every(Boolean) && !!pkg.installed), - map(([currentDeps, depErrors]) => - Object.keys(currentDeps) - .filter(id => !!pkg.manifest.dependencies[id]) - .map(id => this.setDepValues(pkg, id, depErrors)), - ), - startWith([]), - ) + transform(pkg: PackageDataEntry): DependencyInfo[] { + if (!pkg.installed) return [] + + return Object.keys(pkg.installed?.['current-dependencies']) + .filter(id => !!pkg.manifest.dependencies[id]) + .map(id => + this.setDepValues(pkg, id, pkg.installed!.status['dependency-errors']), + ) } private setDepValues( 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 65b07df82..93aa61e19 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 @@ -863,11 +863,16 @@ export class MockApiService extends ApiService { } setTimeout(() => { - const patch2: Operation[] = [ + const patch2: Operation[] = [ { op: PatchOp.REPLACE, - path: `/package-data/${id}`, - value: { ...Mock.LocalPkgs[id] }, + path: `/package-data/${id}/state`, + value: PackageState.Installed, + }, + { + op: PatchOp.ADD, + path: `/package-data/${id}/installed`, + value: { ...Mock.LocalPkgs[id].installed }, }, { op: PatchOp.REMOVE, diff --git a/frontend/projects/ui/src/app/services/patch-db/patch-db.factory.ts b/frontend/projects/ui/src/app/services/patch-db/patch-db.factory.ts index 73bd2b519..78af9beec 100644 --- a/frontend/projects/ui/src/app/services/patch-db/patch-db.factory.ts +++ b/frontend/projects/ui/src/app/services/patch-db/patch-db.factory.ts @@ -1,5 +1,12 @@ import { InjectionToken, Injector } from '@angular/core' -import { bufferTime, catchError, switchMap, take, tap } from 'rxjs/operators' +import { + bufferTime, + catchError, + filter, + switchMap, + take, + tap, +} from 'rxjs/operators' import { Update } from 'patch-db-client' import { DataModel } from './data-model' import { defer, EMPTY, from, interval, merge, Observable } from 'rxjs' @@ -22,6 +29,7 @@ export function sourceFactory( const websocket$ = api.openPatchWebsocket$().pipe( bufferTime(250), + filter(updates => !!updates.length), catchError((_, watch$) => { connectionService.websocketConnected$.next(false) diff --git a/frontend/projects/ui/src/app/services/pkg-status-rendering.service.ts b/frontend/projects/ui/src/app/services/pkg-status-rendering.service.ts index 68043ffab..58fab27bf 100644 --- a/frontend/projects/ui/src/app/services/pkg-status-rendering.service.ts +++ b/frontend/projects/ui/src/app/services/pkg-status-rendering.service.ts @@ -167,7 +167,11 @@ export const PrimaryRendering: Record = { color: 'success', showDots: false, }, - [PrimaryStatus.NeedsConfig]: { display: 'Needs Config', color: 'warning' }, + [PrimaryStatus.NeedsConfig]: { + display: 'Needs Config', + color: 'warning', + showDots: false, + }, } export const DependencyRendering: Record = { diff --git a/patch-db b/patch-db index 74c01eb5d..20beb61ba 160000 --- a/patch-db +++ b/patch-db @@ -1 +1 @@ -Subproject commit 74c01eb5dbab375abfcf27b7ef9716d6d01c88b5 +Subproject commit 20beb61baace9d25a8c50e4b552d59a86eb84dad