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