add a route resolver to ensure that the provider has been fetched when linking by ID
authorGalen Charlton <gmc@equinoxinitiative.org>
Mon, 13 Apr 2020 21:11:03 +0000 (17:11 -0400)
committerGalen Charlton <gmc@equinoxinitiative.org>
Mon, 13 Apr 2020 21:11:03 +0000 (17:11 -0400)
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Open-ILS/src/eg2/src/app/staff/acq/provider/acq-provider.component.ts
Open-ILS/src/eg2/src/app/staff/acq/provider/resolver.service.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/acq/provider/routing.module.ts

index 6441229..4dcadbe 100644 (file)
@@ -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 (file)
index 0000000..f1f0de5
--- /dev/null
@@ -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<Promise<any[]>> {
+
+    savedId: number = null;
+    
+    constructor(
+        private router: Router,
+        private providerRecord: ProviderRecordService,
+    ) {}
+
+    resolve(
+        route: ActivatedRouteSnapshot,
+        state: RouterStateSnapshot): Promise<any[]> {
+
+        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),
+            ]);
+        }
+    }
+
+}
+
index 2e505c4..8bd2b6a 100644 (file)
@@ -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 {}