From 7890cf6ac6b6717df9a85f0eca7f3241509d45ab Mon Sep 17 00:00:00 2001 From: Matt Hill Date: Thu, 24 Jun 2021 14:31:21 -0600 Subject: [PATCH] basic marketplace caching --- .../app-available-show.page.html | 6 +-- .../app-available-show.page.ts | 25 +++------- .../apps-routes/app-available.service.ts | 20 ++++++++ .../app-release-notes.module.ts} | 6 +-- .../app-release-notes.page.html} | 6 +-- .../app-release-notes.page.scss} | 0 .../app-release-notes.page.ts | 39 +++++++++++++++ .../pages/apps-routes/apps-routing.module.ts | 2 +- .../release-notes/release-notes.model.ts | 12 ----- .../release-notes/release-notes.page.ts | 50 ------------------- 10 files changed, 77 insertions(+), 89 deletions(-) create mode 100644 ui/src/app/pages/apps-routes/app-available.service.ts rename ui/src/app/pages/apps-routes/{release-notes/release-notes.module.ts => app-release-notes/app-release-notes.module.ts} (82%) rename ui/src/app/pages/apps-routes/{release-notes/release-notes.page.html => app-release-notes/app-release-notes.page.html} (66%) rename ui/src/app/pages/apps-routes/{release-notes/release-notes.page.scss => app-release-notes/app-release-notes.page.scss} (100%) create mode 100644 ui/src/app/pages/apps-routes/app-release-notes/app-release-notes.page.ts delete mode 100644 ui/src/app/pages/apps-routes/release-notes/release-notes.model.ts delete mode 100644 ui/src/app/pages/apps-routes/release-notes/release-notes.page.ts 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 006d4d2b0..37bc86756 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 @@ -12,9 +12,9 @@ - + - + {{ error }} @@ -157,5 +157,5 @@ - + \ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.ts b/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.ts index 0cdb62c54..f56e91460 100644 --- a/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.ts +++ b/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.ts @@ -1,6 +1,5 @@ import { Component } from '@angular/core' import { ActivatedRoute } from '@angular/router' -import { ApiService } from 'src/app/services/api/api.service' import { AlertController, ModalController, NavController, PopoverController } from '@ionic/angular' import { Recommendation } from 'src/app/components/recommendation-button/recommendation-button.component' import { wizardModal } from 'src/app/components/install-wizard/install-wizard.component' @@ -9,10 +8,9 @@ import { InformationPopoverComponent } from 'src/app/components/information-popo import { Emver } from 'src/app/services/emver.service' import { displayEmver } from 'src/app/pipes/emver.pipe' import { pauseFor } from 'src/app/util/misc.util' -import { AvailableShow } from 'src/app/services/api/api-types' import { PatchDbModel } from 'src/app/models/patch-db/patch-db-model' import { PackageState } from 'src/app/models/patch-db/data-model' -import { ReleaseNoteModel } from '../release-notes/release-notes.model' +import { AppAvailableService } from '../app-available.service' @Component({ selector: 'app-available-show', @@ -20,9 +18,7 @@ import { ReleaseNoteModel } from '../release-notes/release-notes.model' styleUrls: ['./app-available-show.page.scss'], }) export class AppAvailableShowPage { - loading = true error = '' - pkg: AvailableShow pkgId: string PackageState = PackageState @@ -34,7 +30,6 @@ export class AppAvailableShowPage { constructor ( private readonly route: ActivatedRoute, - private readonly apiService: ApiService, private readonly alertCtrl: AlertController, private readonly modalCtrl: ModalController, private readonly wizardBaker: WizardBaker, @@ -42,25 +37,21 @@ export class AppAvailableShowPage { private readonly popoverController: PopoverController, private readonly emver: Emver, public readonly patch: PatchDbModel, - public releaseNotesModel: ReleaseNoteModel, + public aaService: AppAvailableService, ) { } async ngOnInit () { - this.pkgId = this.route.snapshot.paramMap.get('pkgId') as string this.rec = history.state && history.state.installRec as Recommendation this.getPkg() } async getPkg (version?: string): Promise { - this.loading = true + this.pkgId = this.route.snapshot.paramMap.get('pkgId') try { - this.pkg = await this.apiService.getAvailableShow({ id: this.pkgId, version }) - this.releaseNotesModel.releaseNotes = this.pkg['release-notes'] + await this.aaService.setPkg(this.pkgId, version) } catch (e) { console.error(e) this.error = e.message - } finally { - this.loading = false } } @@ -82,13 +73,13 @@ export class AppAvailableShowPage { const alert = await this.alertCtrl.create({ header: 'Versions', backdropDismiss: false, - inputs: this.pkg.versions.sort((a, b) => -1 * this.emver.compare(a, b)).map(v => { + inputs: this.aaService.pkgs[this.pkgId].versions.sort((a, b) => -1 * this.emver.compare(a, b)).map(v => { return { name: v, // for CSS type: 'radio', label: displayEmver(v), // appearance on screen value: v, // literal SEM version value - checked: this.pkg.manifest.version === v, + checked: this.aaService.pkgs[this.pkgId].manifest.version === v, } }), buttons: [ @@ -108,7 +99,7 @@ export class AppAvailableShowPage { } async install () { - const { id, title, version, dependencies, alerts } = this.pkg.manifest + const { id, title, version, dependencies, alerts } = this.aaService.pkgs[this.pkgId].manifest const { cancelled } = await wizardModal( this.modalCtrl, this.wizardBaker.install({ @@ -124,7 +115,7 @@ export class AppAvailableShowPage { } async update (action: 'update' | 'downgrade') { - const { id, title, version, dependencies, alerts } = this.pkg.manifest + const { id, title, version, dependencies, alerts } = this.aaService.pkgs[this.pkgId].manifest const value = { id, title, diff --git a/ui/src/app/pages/apps-routes/app-available.service.ts b/ui/src/app/pages/apps-routes/app-available.service.ts new file mode 100644 index 000000000..fcf15d180 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-available.service.ts @@ -0,0 +1,20 @@ +import { Injectable } from '@angular/core' +import { AvailableShow } from 'src/app/services/api/api-types' +import { ApiService } from 'src/app/services/api/api.service' + +@Injectable({ + providedIn: 'root', +}) +export class AppAvailableService { + pkgs: { [id: string]: AvailableShow } = { } + + constructor ( + private readonly apiService: ApiService, + ) { } + + async setPkg (id: string, version?: string): Promise { + this.pkgs[id] = await this.apiService.getAvailableShow({ id, version }) + } +} + + diff --git a/ui/src/app/pages/apps-routes/release-notes/release-notes.module.ts b/ui/src/app/pages/apps-routes/app-release-notes/app-release-notes.module.ts similarity index 82% rename from ui/src/app/pages/apps-routes/release-notes/release-notes.module.ts rename to ui/src/app/pages/apps-routes/app-release-notes/app-release-notes.module.ts index 6ef097c9d..a6457ef85 100644 --- a/ui/src/app/pages/apps-routes/release-notes/release-notes.module.ts +++ b/ui/src/app/pages/apps-routes/app-release-notes/app-release-notes.module.ts @@ -2,14 +2,14 @@ import { NgModule } from '@angular/core' import { CommonModule } from '@angular/common' import { Routes, RouterModule } from '@angular/router' import { IonicModule } from '@ionic/angular' -import { ReleaseNotes } from './release-notes.page' +import { AppReleaseNotes } from './app-release-notes.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: ReleaseNotes, + component: AppReleaseNotes, }, ] @@ -21,6 +21,6 @@ const routes: Routes = [ PwaBackComponentModule, SharingModule, ], - declarations: [ReleaseNotes], + declarations: [AppReleaseNotes], }) export class ReleaseNotesModule { } diff --git a/ui/src/app/pages/apps-routes/release-notes/release-notes.page.html b/ui/src/app/pages/apps-routes/app-release-notes/app-release-notes.page.html similarity index 66% rename from ui/src/app/pages/apps-routes/release-notes/release-notes.page.html rename to ui/src/app/pages/apps-routes/app-release-notes/app-release-notes.page.html index ac5b8df34..c850c7acb 100644 --- a/ui/src/app/pages/apps-routes/release-notes/release-notes.page.html +++ b/ui/src/app/pages/apps-routes/app-release-notes/app-release-notes.page.html @@ -8,12 +8,12 @@ - + -
+
-

{{note.key | displayEmver}}

+

{{ note.key | displayEmver }}

diff --git a/ui/src/app/pages/apps-routes/release-notes/release-notes.page.scss b/ui/src/app/pages/apps-routes/app-release-notes/app-release-notes.page.scss similarity index 100% rename from ui/src/app/pages/apps-routes/release-notes/release-notes.page.scss rename to ui/src/app/pages/apps-routes/app-release-notes/app-release-notes.page.scss diff --git a/ui/src/app/pages/apps-routes/app-release-notes/app-release-notes.page.ts b/ui/src/app/pages/apps-routes/app-release-notes/app-release-notes.page.ts new file mode 100644 index 000000000..cf0159045 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-release-notes/app-release-notes.page.ts @@ -0,0 +1,39 @@ +import { Component } from '@angular/core' +import { ActivatedRoute } from '@angular/router' +import { AppAvailableService } from '../app-available.service' + +@Component({ + selector: 'app-release-notes', + templateUrl: './app-release-notes.page.html', + styleUrls: ['./app-release-notes.page.scss'], +}) +export class AppReleaseNotes { + error = '' + selected: string + pkgId: string + + constructor ( + private readonly route: ActivatedRoute, + public aaService: AppAvailableService, + ) { } + + ngOnInit () { + this.pkgId = this.route.snapshot.paramMap.get('pkgId') + const version = this.route.snapshot.paramMap.get('version') + if (!this.aaService.pkgs[this.pkgId]) { + this.aaService.setPkg(this.pkgId, version) + } + } + + setSelected (selected: string) { + if (this.selected === selected) { + this.selected = null + } else { + this.selected = selected + } + } + + 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 0765dcd4b..83c884bd5 100644 --- a/ui/src/app/pages/apps-routes/apps-routing.module.ts +++ b/ui/src/app/pages/apps-routes/apps-routing.module.ts @@ -65,7 +65,7 @@ const routes: Routes = [ }, { path: 'marketplace/:pkgId/notes', - loadChildren: () => import('./release-notes/release-notes.module').then(m => m.ReleaseNotesModule), + loadChildren: () => import('./app-release-notes/app-release-notes.module').then(m => m.ReleaseNotesModule), }, ] diff --git a/ui/src/app/pages/apps-routes/release-notes/release-notes.model.ts b/ui/src/app/pages/apps-routes/release-notes/release-notes.model.ts deleted file mode 100644 index 520829faf..000000000 --- a/ui/src/app/pages/apps-routes/release-notes/release-notes.model.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Injectable } from '@angular/core' - -@Injectable({ - providedIn: 'root', -}) -export class ReleaseNoteModel { - releaseNotes: { [version: string]: string} - - constructor () { } -} - - diff --git a/ui/src/app/pages/apps-routes/release-notes/release-notes.page.ts b/ui/src/app/pages/apps-routes/release-notes/release-notes.page.ts deleted file mode 100644 index 0cee9aafb..000000000 --- a/ui/src/app/pages/apps-routes/release-notes/release-notes.page.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Component } from '@angular/core' -import { ActivatedRoute } from '@angular/router' -import { ApiService } from 'src/app/services/api/api.service' -import { ReleaseNoteModel } from './release-notes.model' - -@Component({ - selector: 'release-notes', - templateUrl: './release-notes.page.html', - styleUrls: ['./release-notes.page.scss'], -}) -export class ReleaseNotes { - error = '' - pkgId: string - selected: string - - constructor ( - private readonly route: ActivatedRoute, - private readonly apiService: ApiService, - public releaseNotesModel: ReleaseNoteModel, - ) { } - - ngOnInit () { - this.pkgId = this.route.snapshot.paramMap.get('pkgId') - if (!this.releaseNotesModel.releaseNotes) { - this.getReleaseNotes() - } - } - - async getReleaseNotes (version?: string): Promise { - try { - const pkg = await this.apiService.getAvailableShow({ id: this.pkgId, version }) - this.releaseNotesModel.releaseNotes = pkg['release-notes'] - } catch (e) { - console.error(e) - this.error = e.message - } - } - - setSelected (selected: string) { - if (this.selected === selected) { - this.selected = null - } else { - this.selected = selected - } - } - - asIsOrder (a: any, b: any) { - return 0 - } -}