From 5aef704200d7c6cbfaddc56e3b0c5d44f7dd2a6d Mon Sep 17 00:00:00 2001
From: Kyle Huckins <khuckins@catalyte.io>
Date: Tue, 30 Jul 2019 19:00:14 +0000
Subject: [PATCH] lp1739277 OrgSelect Class Callback Holdings Implementation

- Implement OrgSelectClassCallback in Angular Catalog Holdings UI

Signed-off-by: Kyle Huckins <khuckins@catalyte.io>

 Changes to be committed:
	modified:   Open-ILS/src/eg2/src/app/staff/catalog/record/holdings.component.html
	modified:   Open-ILS/src/eg2/src/app/staff/catalog/record/holdings.component.ts

Signed-off-by: Jennifer Bruch <jbruch@sparkpa.org>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
---
 .../staff/catalog/record/holdings.component.html    |  6 ++++--
 .../app/staff/catalog/record/holdings.component.ts  | 21 +++++++++++++++++++++
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/Open-ILS/src/eg2/src/app/staff/catalog/record/holdings.component.html b/Open-ILS/src/eg2/src/app/staff/catalog/record/holdings.component.html
index b36c419bee..7791e151a8 100644
--- a/Open-ILS/src/eg2/src/app/staff/catalog/record/holdings.component.html
+++ b/Open-ILS/src/eg2/src/app/staff/catalog/record/holdings.component.html
@@ -7,8 +7,10 @@
       <div class="input-group-prepend">
         <div class="input-group-text" i18n>Holdings Maintenance</div>
       </div>
-      <eg-org-select [initialOrg]="contextOrg" 
-        persistKey="catalog.holdings" (onChange)="contextOrgChanged($event)">
+      <eg-org-select [initialOrg]="contextOrg"
+        persistKey="catalog.holdings"
+        (onChange)="contextOrgChanged($event)"
+        [orgClassCallback]="orgClassCallback">
       </eg-org-select>
     </div>
   </div>
diff --git a/Open-ILS/src/eg2/src/app/staff/catalog/record/holdings.component.ts b/Open-ILS/src/eg2/src/app/staff/catalog/record/holdings.component.ts
index 2a58ef605c..c3388477d5 100644
--- a/Open-ILS/src/eg2/src/app/staff/catalog/record/holdings.component.ts
+++ b/Open-ILS/src/eg2/src/app/staff/catalog/record/holdings.component.ts
@@ -7,6 +7,7 @@ import {Pager} from '@eg/share/util/pager';
 import {IdlObject, IdlService} from '@eg/core/idl.service';
 import {StaffCatalogService} from '../catalog.service';
 import {OrgService} from '@eg/core/org.service';
+import {NetService} from '@eg/core/net.service';
 import {PcrudService} from '@eg/core/pcrud.service';
 import {AuthService} from '@eg/core/auth.service';
 import {GridDataSource, GridColumn, GridCellTextGenerator} from '@eg/share/grid/grid';
@@ -144,7 +145,10 @@ export class HoldingsMaintenanceComponent implements OnInit {
     renderFromPrefs: boolean;
 
     rowClassCallback: (row: any) => string;
+
     cellTextGenerator: GridCellTextGenerator;
+    orgClassCallback: (orgId: number) => string;
+    marked_orgs: number[] = [];
 
     private _recId: number;
     @Input() set recordId(id: number) {
@@ -171,6 +175,7 @@ export class HoldingsMaintenanceComponent implements OnInit {
         private org: OrgService,
         private idl: IdlService,
         private pcrud: PcrudService,
+        private net: NetService,
         private auth: AuthService,
         private staffCat: StaffCatalogService,
         private store: ServerStoreService,
@@ -202,6 +207,7 @@ export class HoldingsMaintenanceComponent implements OnInit {
             }
         };
 
+
         // Text-ify function for cells that use display templates.
         this.cellTextGenerator = {
             owner_label: row => row.locationLabel,
@@ -209,6 +215,11 @@ export class HoldingsMaintenanceComponent implements OnInit {
                 this.gridTemplateContext.copyIsHoldable(row.copy) : ''
         };
 
+        this.orgClassCallback = (orgId: number): string => {
+            if (this.marked_orgs.includes(orgId)) { return 'font-weight-bold'; }
+            return '';
+        };
+
         this.gridTemplateContext = {
             toggleExpandRow: (row: HoldingsEntry) => {
                 row.treeNode.expanded = !row.treeNode.expanded;
@@ -265,6 +276,16 @@ export class HoldingsMaintenanceComponent implements OnInit {
             if (!this.contextOrgLoaded) { return empty(); }
             return this.fetchHoldings(pager);
         };
+
+        this.net.request(
+            'open-ils.search',
+            'open-ils.search.biblio.copy_counts.retrieve.staff',
+            this.recordId
+        ).toPromise().then(result => {
+            result.forEach(copy_count => {
+                this.marked_orgs.push(copy_count[0]);
+            });
+        });
     }
 
     // No data is loaded until the first occurrence of the org change handler
-- 
2.11.0