acq search: ensure that results grid is cleared in certain cases
authorGalen Charlton <gmc@equinoxinitiative.org>
Wed, 26 Feb 2020 21:06:16 +0000 (16:06 -0500)
committerGalen Charlton <gmc@equinoxinitiative.org>
Wed, 26 Feb 2020 21:06:16 +0000 (16:06 -0500)
Namely, when navigating to the same search tab when retrieve
immediately is not in force, e.g., when going from 'My Selection Lists'
to 'Selection List Search'

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Open-ILS/src/eg2/src/app/staff/acq/search/acq-search.component.ts

index 7eb21d8..fca4c6a 100644 (file)
@@ -29,6 +29,8 @@ export class AcqSearchComponent implements OnInit, AfterViewInit {
     @ViewChildren(InvoiceResultsComponent) invResults: QueryList<PurchaseOrderResultsComponent>;
     @ViewChildren(PicklistResultsComponent) plResults: QueryList<PurchaseOrderResultsComponent>;
 
+    previousUrl: string = null;
+
     constructor(
         private router: Router,
         private route: ActivatedRoute,
@@ -69,6 +71,31 @@ export class AcqSearchComponent implements OnInit, AfterViewInit {
         });
         this.router.events.subscribe(routeEvent => {
             if (routeEvent instanceof NavigationEnd) {
+                // force reset of grid data source if we're navigating from
+                // a search tab to the same search tab
+                if (this.previousUrl != null) {
+                    let prevRoute = this.previousUrl.match(/acq\/search\/([a-z]+)/);
+                    let newRoute = routeEvent.url.match(/acq\/search\/([a-z]+)/);
+                    let prevTab = prevRoute  == null ? 'lineitems' : prevRoute[1];
+                    let newTab = newRoute  == null ? 'lineitems' : newRoute[1];
+                    if (prevTab === newTab) {
+                        switch (newTab) {
+                            case 'lineitems':
+                                this.liResults.toArray()[0].gridSource.reset();
+                                break;
+                            case 'purchaseorders':
+                                this.poResults.toArray()[0].gridSource.reset();
+                                break;
+                            case 'invoices':
+                                this.invResults.toArray()[0].gridSource.reset();
+                                break;
+                            case 'selectionlists':
+                                this.plResults.toArray()[0].gridSource.reset();
+                                break;
+                        }
+                    }
+                }
+                this.previousUrl = routeEvent.url;
                 this.ngOnInit(); // TODO: probably overkill
             }
         });