From: Galen Charlton Date: Mon, 13 Apr 2020 21:11:03 +0000 (-0400) Subject: add a route resolver to ensure that the provider has been fetched when linking by ID X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=a1d971a46042cce64f41c232f74e58f6cc5ea424;p=working%2FEvergreen.git add a route resolver to ensure that the provider has been fetched when linking by ID Signed-off-by: Galen Charlton --- diff --git a/Open-ILS/src/eg2/src/app/staff/acq/provider/acq-provider.component.ts b/Open-ILS/src/eg2/src/app/staff/acq/provider/acq-provider.component.ts index 6441229edf..4dcadbe618 100644 --- a/Open-ILS/src/eg2/src/app/staff/acq/provider/acq-provider.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/acq/provider/acq-provider.component.ts @@ -54,7 +54,6 @@ export class AcqProviderComponent implements OnInit, AfterViewInit { if (idParam) { this.showSearchForm = false; this.id = idParam; - this.providerRecord.fetch(this.id); if (!tabTypeParam) { this.activeTab = this.defaultTabType; this.router.navigate(['/staff', 'acq', 'provider', this.id, this.activeTab]); diff --git a/Open-ILS/src/eg2/src/app/staff/acq/provider/resolver.service.ts b/Open-ILS/src/eg2/src/app/staff/acq/provider/resolver.service.ts new file mode 100644 index 0000000000..f1f0de5505 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/acq/provider/resolver.service.ts @@ -0,0 +1,38 @@ +import {Injectable} from '@angular/core'; +import {Router, Resolve, RouterStateSnapshot, + ActivatedRouteSnapshot} from '@angular/router'; +import {ProviderRecordService} from './provider-record.service'; + +@Injectable() +export class ProviderResolver implements Resolve> { + + savedId: number = null; + + constructor( + private router: Router, + private providerRecord: ProviderRecordService, + ) {} + + resolve( + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot): Promise { + + console.debug('ProviderResolver:resolve()'); + + const id = Number(route.paramMap.get('id')); + + if (this.savedId !== null && this.savedId === id) { + // don't refetch + return Promise.all([ + Promise.resolve(), + ]); + } else { + this.savedId = id; + return Promise.all([ + this.providerRecord.fetch(id), + ]); + } + } + +} + diff --git a/Open-ILS/src/eg2/src/app/staff/acq/provider/routing.module.ts b/Open-ILS/src/eg2/src/app/staff/acq/provider/routing.module.ts index 2e505c4fc1..8bd2b6a9c8 100644 --- a/Open-ILS/src/eg2/src/app/staff/acq/provider/routing.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/acq/provider/routing.module.ts @@ -1,6 +1,7 @@ import {NgModule} from '@angular/core'; import {RouterModule, Routes} from '@angular/router'; import {AcqProviderComponent} from './acq-provider.component'; +import {ProviderResolver} from './resolver.service'; const routes: Routes = [ { path: '', @@ -9,10 +10,12 @@ const routes: Routes = [ }, { path: ':id', component: AcqProviderComponent, + resolve: { providerResolver : ProviderResolver }, runGuardsAndResolvers: 'always' }, { path: ':id/:tab', component: AcqProviderComponent, + resolve: { providerResolver : ProviderResolver }, runGuardsAndResolvers: 'always' } ]; @@ -20,7 +23,7 @@ const routes: Routes = [ @NgModule({ imports: [RouterModule.forChild(routes)], exports: [RouterModule], - providers: [] + providers: [ProviderResolver] }) export class AcqProviderRoutingModule {}