From 56f9bd4b89542080b362295f219fc6cb53583d8d Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Wed, 23 Jun 2021 11:34:54 -0600 Subject: [PATCH] drew updates --- ui/src/app/app.component.html | 14 ++++- .../install-wizard/alert/alert.component.html | 10 ++++ .../alert/alert.component.module.ts | 20 +++++++ .../install-wizard/alert/alert.component.ts | 24 +++++++++ .../install-wizard.component.module.ts | 2 + .../install-wizard.component.ts | 2 + .../install-wizard/notes/notes.component.html | 7 ++- .../install-wizard/notes/notes.component.ts | 6 ++- .../install-wizard/prebaked-wizards.ts | 18 +++---- ui/src/app/models/patch-db/data-model.ts | 15 ++++-- .../app-available-list.page.ts | 2 +- .../app-available-show.page.html | 10 +++- .../app-metrics/app-metrics.page.html | 3 +- .../app-release-notes-list.module.ts | 26 +++++++++ .../app-release-notes-list.page.html | 12 +++++ .../app-release-notes-list.page.scss | 3 ++ .../app-release-notes-list.page.ts | 42 +++++++++++++++ .../pages/apps-routes/apps-routing.module.ts | 4 ++ ui/src/app/services/api/api-types.ts | 5 +- ui/src/app/services/api/mock-app-fixures.ts | 53 ++++++++++++++++--- .../services/pkg-status-rendering.service.ts | 12 +++-- 21 files changed, 257 insertions(+), 33 deletions(-) create mode 100644 ui/src/app/components/install-wizard/alert/alert.component.html create mode 100644 ui/src/app/components/install-wizard/alert/alert.component.module.ts create mode 100644 ui/src/app/components/install-wizard/alert/alert.component.ts create mode 100644 ui/src/app/pages/apps-routes/app-release-notes-list/app-release-notes-list.module.ts create mode 100644 ui/src/app/pages/apps-routes/app-release-notes-list/app-release-notes-list.page.html create mode 100644 ui/src/app/pages/apps-routes/app-release-notes-list/app-release-notes-list.page.scss create mode 100644 ui/src/app/pages/apps-routes/app-release-notes-list/app-release-notes-list.page.ts diff --git a/ui/src/app/app.component.html b/ui/src/app/app.component.html index 34a3c379c..f646bae10 100644 --- a/ui/src/app/app.component.html +++ b/ui/src/app/app.component.html @@ -59,7 +59,9 @@ + + @@ -71,31 +73,40 @@ + + + + - + + + + + + @@ -149,3 +160,4 @@ + diff --git a/ui/src/app/components/install-wizard/alert/alert.component.html b/ui/src/app/components/install-wizard/alert/alert.component.html new file mode 100644 index 000000000..364df9700 --- /dev/null +++ b/ui/src/app/components/install-wizard/alert/alert.component.html @@ -0,0 +1,10 @@ +
+
+
+ + {{ params.title }} + +
+
+
+
diff --git a/ui/src/app/components/install-wizard/alert/alert.component.module.ts b/ui/src/app/components/install-wizard/alert/alert.component.module.ts new file mode 100644 index 000000000..aa94a390d --- /dev/null +++ b/ui/src/app/components/install-wizard/alert/alert.component.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { AlertComponent } from './alert.component' +import { IonicModule } from '@ionic/angular' +import { RouterModule } from '@angular/router' +import { SharingModule } from 'src/app/modules/sharing.module' + +@NgModule({ + declarations: [ + AlertComponent, + ], + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild([]), + SharingModule, + ], + exports: [AlertComponent], +}) +export class AlertComponentModule { } diff --git a/ui/src/app/components/install-wizard/alert/alert.component.ts b/ui/src/app/components/install-wizard/alert/alert.component.ts new file mode 100644 index 000000000..7ed0ec1c1 --- /dev/null +++ b/ui/src/app/components/install-wizard/alert/alert.component.ts @@ -0,0 +1,24 @@ +import { Component, Input, OnInit } from '@angular/core' +import { BehaviorSubject, Subject } from 'rxjs' +import { Loadable } from '../loadable' + +@Component({ + selector: 'alert', + templateUrl: './alert.component.html', + styleUrls: ['../install-wizard.component.scss'], +}) +export class AlertComponent implements OnInit, Loadable { + @Input() params: { + alert: string + title: string + titleColor: string + } + + loading$ = new BehaviorSubject(false) + cancel$ = new Subject() + + load () { } + + constructor () { } + ngOnInit () { } +} diff --git a/ui/src/app/components/install-wizard/install-wizard.component.module.ts b/ui/src/app/components/install-wizard/install-wizard.component.module.ts index 38711e825..7d5c7d67c 100644 --- a/ui/src/app/components/install-wizard/install-wizard.component.module.ts +++ b/ui/src/app/components/install-wizard/install-wizard.component.module.ts @@ -7,6 +7,7 @@ import { SharingModule } from 'src/app/modules/sharing.module' import { DependentsComponentModule } from './dependents/dependents.component.module' import { CompleteComponentModule } from './complete/complete.component.module' import { NotesComponentModule } from './notes/notes.component.module' +import { AlertComponentModule } from './alert/alert.component.module' @NgModule({ declarations: [ @@ -20,6 +21,7 @@ import { NotesComponentModule } from './notes/notes.component.module' DependentsComponentModule, CompleteComponentModule, NotesComponentModule, + AlertComponentModule, ], exports: [InstallWizardComponent], }) diff --git a/ui/src/app/components/install-wizard/install-wizard.component.ts b/ui/src/app/components/install-wizard/install-wizard.component.ts index 1d45d2e41..08dba2c15 100644 --- a/ui/src/app/components/install-wizard/install-wizard.component.ts +++ b/ui/src/app/components/install-wizard/install-wizard.component.ts @@ -4,6 +4,7 @@ import { BehaviorSubject } from 'rxjs' import { capitalizeFirstLetter, pauseFor } from 'src/app/util/misc.util' import { CompleteComponent } from './complete/complete.component' import { DependentsComponent } from './dependents/dependents.component' +import { AlertComponent } from './alert/alert.component' import { NotesComponent } from './notes/notes.component' import { Loadable } from './loadable' import { WizardAction } from './wizard-types' @@ -92,6 +93,7 @@ export interface SlideDefinition { slide: { selector: 'dependents', params: DependentsComponent['params'] } | { selector: 'complete', params: CompleteComponent['params'] } | + { selector: 'alert', params: AlertComponent['params'] } | { selector: 'notes', params: NotesComponent['params'] } bottomBar: { cancel: { diff --git a/ui/src/app/components/install-wizard/notes/notes.component.html b/ui/src/app/components/install-wizard/notes/notes.component.html index 670177ad7..880f9cf35 100644 --- a/ui/src/app/components/install-wizard/notes/notes.component.html +++ b/ui/src/app/components/install-wizard/notes/notes.component.html @@ -2,9 +2,12 @@
- {{params.title}} + {{ params.title }}
-
+
+

{{ note.key }}

+
+
diff --git a/ui/src/app/components/install-wizard/notes/notes.component.ts b/ui/src/app/components/install-wizard/notes/notes.component.ts index 44dcda9ac..6b9126886 100644 --- a/ui/src/app/components/install-wizard/notes/notes.component.ts +++ b/ui/src/app/components/install-wizard/notes/notes.component.ts @@ -9,7 +9,7 @@ import { Loadable } from '../loadable' }) export class NotesComponent implements OnInit, Loadable { @Input() params: { - notes: string + notes: { [version: string]: string } title: string titleColor: string } @@ -21,4 +21,8 @@ export class NotesComponent implements OnInit, Loadable { constructor () { } ngOnInit () { } + + asIsOrder () { + return 0 + } } diff --git a/ui/src/app/components/install-wizard/prebaked-wizards.ts b/ui/src/app/components/install-wizard/prebaked-wizards.ts index 2eb3a3e60..8eafedd9f 100644 --- a/ui/src/app/components/install-wizard/prebaked-wizards.ts +++ b/ui/src/app/components/install-wizard/prebaked-wizards.ts @@ -27,9 +27,9 @@ export class WizardBaker { const slideDefinitions: SlideDefinition[] = [ installAlert ? { slide: { - selector: 'notes', + selector: 'alert', params: { - notes: installAlert, + alert: installAlert, title: 'Warning', titleColor: 'warning', }, @@ -72,9 +72,9 @@ export class WizardBaker { const slideDefinitions: SlideDefinition[] = [ installAlert ? { slide: { - selector: 'notes', + selector: 'alert', params: { - notes: installAlert, + alert: installAlert, title: 'Warning', titleColor: 'warning', }, @@ -120,7 +120,7 @@ export class WizardBaker { } updateOS (values: { - version: string, releaseNotes: string + version: string, releaseNotes: { [version: string]: string } }): InstallWizardComponent['params'] { const { version, releaseNotes } = values @@ -176,9 +176,9 @@ export class WizardBaker { const slideDefinitions: SlideDefinition[] = [ installAlert ? { slide: { - selector: 'notes', + selector: 'alert', params: { - notes: installAlert, + alert: installAlert, title: 'Warning', titleColor: 'warning', }, @@ -232,9 +232,9 @@ export class WizardBaker { const slideDefinitions: SlideDefinition[] = [ { slide: { - selector: 'notes', + selector: 'alert', params: { - notes: uninstallAlert || defaultUninstallationWarning(title), + alert: uninstallAlert || defaultUninstallationWarning(title), title: 'Warning', titleColor: 'warning', }, diff --git a/ui/src/app/models/patch-db/data-model.ts b/ui/src/app/models/patch-db/data-model.ts index 3a8b10b65..6e8055cae 100644 --- a/ui/src/app/models/patch-db/data-model.ts +++ b/ui/src/app/models/patch-db/data-model.ts @@ -255,18 +255,19 @@ export enum PackageMainStatus { Restoring = 'restoring', } -export type HealthCheckResult = HealthCheckResultWarmingUp | HealthCheckResultDisabled | HealthCheckResultSuccess | HealthCheckResultFailure +export type HealthCheckResult = HealthCheckResultStarting | HealthCheckResultLoading | HealthCheckResultDisabled | HealthCheckResultSuccess | HealthCheckResultFailure export enum HealthResult { - WarmingUp = 'warming-up', + Starting = 'starting', + Loading = 'loading', Disabled = 'disabled', Success = 'success', Failure = 'failure', } -export interface HealthCheckResultWarmingUp { +export interface HealthCheckResultStarting { time: string // UTC date string - result: HealthResult.WarmingUp + result: HealthResult.Starting } export interface HealthCheckResultDisabled { @@ -279,6 +280,12 @@ export interface HealthCheckResultSuccess { result: HealthResult.Success } +export interface HealthCheckResultLoading { + time: string // UTC date string + result: HealthResult.Loading + message: string +} + export interface HealthCheckResultFailure { time: string // UTC date string result: HealthResult.Failure diff --git a/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.ts b/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.ts index 1d66b0ccf..0eb3a192f 100644 --- a/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.ts +++ b/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.ts @@ -73,7 +73,7 @@ export class AppAvailableListPage { this.modalCtrl, this.wizardBaker.updateOS({ version: this.eos.version, - releaseNotes: this.eos.notes, + releaseNotes: this.eos['release-notes'], }), ) } diff --git a/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.html b/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.html index a5680edbd..006d4d2b0 100644 --- a/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.html +++ b/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.html @@ -97,10 +97,16 @@ - New in {{ pkg.manifest.version | displayEmver }} + + New in {{ pkg.manifest.version | displayEmver }} + + Version History + + + -
+
diff --git a/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.html b/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.html index 34350b04b..322d76f74 100644 --- a/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.html +++ b/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.html @@ -23,7 +23,8 @@
- + +

{{ health.key }}

diff --git a/ui/src/app/pages/apps-routes/app-release-notes-list/app-release-notes-list.module.ts b/ui/src/app/pages/apps-routes/app-release-notes-list/app-release-notes-list.module.ts new file mode 100644 index 000000000..d35d7a9dc --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-release-notes-list/app-release-notes-list.module.ts @@ -0,0 +1,26 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { Routes, RouterModule } from '@angular/router' +import { IonicModule } from '@ionic/angular' +import { AppReleaseNotesList } from './app-release-notes-list.page' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { SharingModule } from 'src/app/modules/sharing.module' + +const routes: Routes = [ + { + path: '', + component: AppReleaseNotesList, + }, +] + +@NgModule({ + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild(routes), + PwaBackComponentModule, + SharingModule, + ], + declarations: [AppReleaseNotesList], +}) +export class AppReleaseNotesListModule { } diff --git a/ui/src/app/pages/apps-routes/app-release-notes-list/app-release-notes-list.page.html b/ui/src/app/pages/apps-routes/app-release-notes-list/app-release-notes-list.page.html new file mode 100644 index 000000000..1725d5978 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-release-notes-list/app-release-notes-list.page.html @@ -0,0 +1,12 @@ + + + + + + Version History + + + + + hello + diff --git a/ui/src/app/pages/apps-routes/app-release-notes-list/app-release-notes-list.page.scss b/ui/src/app/pages/apps-routes/app-release-notes-list/app-release-notes-list.page.scss new file mode 100644 index 000000000..eea898305 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-release-notes-list/app-release-notes-list.page.scss @@ -0,0 +1,3 @@ +.metric-note { + font-size: 16px; +} \ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-release-notes-list/app-release-notes-list.page.ts b/ui/src/app/pages/apps-routes/app-release-notes-list/app-release-notes-list.page.ts new file mode 100644 index 000000000..c21997952 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-release-notes-list/app-release-notes-list.page.ts @@ -0,0 +1,42 @@ +import { Component } from '@angular/core' +import { ActivatedRoute } from '@angular/router' +import { PackageDataEntry } from 'src/app/models/patch-db/data-model' +import { AvailableShow } from 'src/app/services/api/api-types' +import { ApiService } from 'src/app/services/api/api.service' + +@Component({ + selector: 'app-release-notes-list', + templateUrl: './app-release-notes-list.page.html', + styleUrls: ['./app-release-notes-list.page.scss'], +}) +export class AppReleaseNotesList { + loading = true + pkgId: string + pkg: AvailableShow + + constructor ( + private readonly route: ActivatedRoute, + private readonly apiService: ApiService, + + ) { } + + ngOnInit () { + this.pkgId = this.route.snapshot.paramMap.get('pkgId') + } + + async getPkg (version?: string): Promise { + this.loading = true + try { + this.pkg = await this.apiService.getAvailableShow({ id: this.pkgId, version }) + } catch (e) { + console.error(e) + this.error = e.message + } finally { + this.loading = false + } + } + + asIsOrder (a: any, b: any) { + return 0 + } +} diff --git a/ui/src/app/pages/apps-routes/apps-routing.module.ts b/ui/src/app/pages/apps-routes/apps-routing.module.ts index 1fe38bda2..1978b4650 100644 --- a/ui/src/app/pages/apps-routes/apps-routing.module.ts +++ b/ui/src/app/pages/apps-routes/apps-routing.module.ts @@ -63,6 +63,10 @@ const routes: Routes = [ path: 'marketplace/:pkgId', loadChildren: () => import('./app-available-show/app-available-show.module').then(m => m.AppAvailableShowPageModule), }, + { + path: 'marketplace/:pkgId/notes', + loadChildren: () => import('./app-release-notes-list/app-release-notes-list.module').then(m => m.AppReleaseNotesListModule), + }, ] @NgModule({ diff --git a/ui/src/app/services/api/api-types.ts b/ui/src/app/services/api/api-types.ts index 5e4620558..cae4c8195 100644 --- a/ui/src/app/services/api/api-types.ts +++ b/ui/src/app/services/api/api-types.ts @@ -174,7 +174,7 @@ export interface MarketplaceData { export interface MarketplaceEOS { version: string headline: string - notes: string + 'release-notes': { [version: string]: string } } export interface AvailablePreview { @@ -195,7 +195,8 @@ export interface AvailableShow { title: string icon: URL } - } + }, + 'release-notes': { [version: string]: string } } export interface Breakages { diff --git a/ui/src/app/services/api/mock-app-fixures.ts b/ui/src/app/services/api/mock-app-fixures.ts index 859335bae..5ff7a69ed 100644 --- a/ui/src/app/services/api/mock-app-fixures.ts +++ b/ui/src/app/services/api/mock-app-fixures.ts @@ -7,7 +7,7 @@ export module Mock { export const MarketplaceEos: RR.GetMarketplaceEOSRes = { version: '1.0.0', headline: 'Our biggest release ever.', - notes: markdown, + 'release-notes': { '1.0.0': markdown }, } export const AvailableList: RR.GetAvailableListRes = [ @@ -400,45 +400,66 @@ export module Mock { } } = { 'bitcoind': { - '0.19.0': { + '0.19.2': { icon: 'assets/img/service-icons/bitcoind.png', manifest: { ...Mock.MockManifestBitcoind, version: '0.19.0', - 'release-notes': 'release notes for Bitcoin 0.19.0', }, categories: ['bitcoin', 'cryptocurrency'], versions: ['0.19.0', '0.20.0', '0.21.0'], 'dependency-metadata': { }, + 'release-notes': { + '0.19.0': 'release notes for Bitcoin 0.19.0', + '0.19.1': 'release notes for Bitcoin 0.19.1', + '0.19.2': 'Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.', + }, }, '0.20.0': { icon: 'assets/img/service-icons/bitcoind.png', manifest: { ...Mock.MockManifestBitcoind, version: '0.20.0', - 'release-notes': 'release notes for Bitcoin 0.20.0', }, categories: ['bitcoin', 'cryptocurrency'], versions: ['0.19.0', '0.20.0', '0.21.0'], 'dependency-metadata': { }, + 'release-notes': { + '0.19.0': 'release notes for Bitcoin 0.19.0', + '0.19.1': 'release notes for Bitcoin 0.19.1', + '0.19.2': 'Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.', + }, }, '0.21.0': { icon: 'assets/img/service-icons/bitcoind.png', manifest: { ...Mock.MockManifestBitcoind, version: '0.21.0', - 'release-notes': 'release notes for Bitcoin 0.20.0', + 'release-notes': 'Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.', }, categories: ['bitcoin', 'cryptocurrency'], versions: ['0.19.0', '0.20.0', '0.21.0'], 'dependency-metadata': { }, + 'release-notes': { + '0.19.0': 'release notes for Bitcoin 0.19.0', + '0.19.1': 'release notes for Bitcoin 0.19.1', + '0.19.2': 'Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.', + }, }, 'latest': { icon: 'assets/img/service-icons/bitcoind.png', - manifest: Mock.MockManifestBitcoind, + manifest: { + ...Mock.MockManifestBitcoind, + 'release-notes': 'Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.', + }, categories: ['bitcoin', 'cryptocurrency'], versions: ['0.19.0', '0.20.0', '0.21.0'], 'dependency-metadata': { }, + 'release-notes': { + '0.19.2': 'release notes for Bitcoin 0.19.2', + '0.20.0': 'release notes for Bitcoin 0.20.0', + '0.21.0': 'Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.', + }, }, }, 'lnd': { @@ -461,6 +482,11 @@ export module Mock { icon: 'assets/img/service-icons/bitcoin-proxy.png', }, }, + 'release-notes': { + '0.19.0': 'release notes for LND 0.19.0', + '0.19.1': 'release notes for LND 0.19.1', + '0.19.2': 'release notes for LND 0.19.2', + }, }, '0.11.1': { icon: 'assets/img/service-icons/lnd.png', @@ -481,6 +507,11 @@ export module Mock { icon: 'assets/img/service-icons/bitcoin-proxy.png', }, }, + 'release-notes': { + '0.19.0': 'release notes for LND 0.19.0', + '0.19.1': 'release notes for LND 0.19.1', + '0.19.2': 'release notes for LND 0.19.2', + }, }, 'latest': { icon: 'assets/img/service-icons/lnd.png', @@ -497,6 +528,11 @@ export module Mock { icon: 'assets/img/service-icons/bitcoin-proxy.png', }, }, + 'release-notes': { + '0.19.0': 'release notes for LND 0.19.0', + '0.19.1': 'release notes for LND 0.19.1', + '0.19.2': 'release notes for LND 0.19.2', + }, }, }, 'bitcoin-proxy': { @@ -511,6 +547,11 @@ export module Mock { icon: 'assets/img/service-icons/bitcoind.png', }, }, + 'release-notes': { + '0.19.0': 'release notes for btc proxy 0.19.0', + '0.19.1': 'release notes for btc proxy 0.19.1', + '0.19.2': 'release notes for btc proxy 0.19.2', + }, }, }, } diff --git a/ui/src/app/services/pkg-status-rendering.service.ts b/ui/src/app/services/pkg-status-rendering.service.ts index d1545359f..0e47bbc08 100644 --- a/ui/src/app/services/pkg-status-rendering.service.ts +++ b/ui/src/app/services/pkg-status-rendering.service.ts @@ -1,4 +1,4 @@ -import { HealthCheckResultWarmingUp, MainStatus, MainStatusRunning, PackageDataEntry, PackageMainStatus, PackageState, Status } from '../models/patch-db/data-model' +import { HealthCheckResultLoading, MainStatusRunning, PackageDataEntry, PackageMainStatus, PackageState, Status } from '../models/patch-db/data-model' import { ConnectionState } from './connection.service' export function renderPkgStatus (pkg: PackageDataEntry, connection: ConnectionState): PkgStatusRendering { @@ -35,8 +35,11 @@ function handleInstalledState (status: Status): PkgStatusRendering { function handleRunningState (status: MainStatusRunning): PkgStatusRendering { if (Object.values(status.health).some(h => h.result === 'failure')) { return { display: 'Needs Attention', color: 'danger', showDots: false, feStatus: FEStatus.NeedsAttention } - } else if (Object.values(status.health).some(h => h.result === 'warming-up')) { - return { display: 'Starting Up', color: 'warning', showDots: true, feStatus: FEStatus.StartingUp } + } else if (Object.values(status.health).some(h => h.result === 'starting')) { + return { display: 'Starting Up', color: 'warning', showDots: true, feStatus: FEStatus.Starting } + } else if (Object.values(status.health).some(h => h.result === 'loading')) { + const firstLoading = Object.values(status.health).find(h => h.result === 'loading') as HealthCheckResultLoading + return { display: firstLoading.message, color: 'warning', showDots: true, feStatus: FEStatus.Loading } } else { return { display: 'Running', color: 'success', showDots: false, feStatus: FEStatus.Running } } @@ -63,8 +66,9 @@ export enum FEStatus { Restoring = 'restoring', // FE NeedsAttention = 'needs-attention', - StartingUp = 'starting-up', + Starting = 'starting', Connecting = 'connecting', DependencyIssue = 'dependency-issue', NeedsConfig = 'needs-config', + Loading = 'loading', }