From d1518edc8f8a0740314fc2b58302b306291ae37b Mon Sep 17 00:00:00 2001
From: Mike Rylander <mrylander@gmail.com>
Date: Fri, 14 Sep 2018 11:03:30 -0400
Subject: [PATCH] LP#1684202: Protect against missing features; Make feature
 more general

I've wrapped the BroadcastChannel code in a test derived from the auth version
of the same concept.  Also broadcasting the full set of record IDs and the
pre-update call number IDs for other interfaces that might be interested. The
channel name is also made more generic and made to follow the precedent from
the auth channel name.

Signed-off-by: Mike Rylander <mrylander@gmail.com>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
---
 .../web/js/ui/default/staff/cat/catalog/app.js     | 28 ++++++++++++++++++++++
 .../web/js/ui/default/staff/cat/volcopy/app.js     | 15 +++++++++++-
 2 files changed, 42 insertions(+), 1 deletion(-)

diff --git a/Open-ILS/web/js/ui/default/staff/cat/catalog/app.js b/Open-ILS/web/js/ui/default/staff/cat/catalog/app.js
index 45057161b1..a38d647d28 100644
--- a/Open-ILS/web/js/ui/default/staff/cat/catalog/app.js
+++ b/Open-ILS/web/js/ui/default/staff/cat/catalog/app.js
@@ -1080,6 +1080,34 @@ function($scope , $routeParams , $location , $window , $q , egCore , egHolds , e
         });
     }
 
+    var holdings_bChannel = null;
+    // subscribe to BroadcastChannel for any child VolCopy tabs
+    // refresh grid if needed to show new updates
+    // if ($scope.record_tab === 'holdings'){
+    $scope.$watch('record_tab', function(n){
+    
+        if (n === 'holdings'){
+            if (typeof BroadcastChannel != 'undefined') {
+                // we're in holdings tab, connect 2 bChannel
+                holdings_bChannel = new BroadcastChannel('eg.holdings.update');
+                holdings_bChannel.onmessage = function(e){
+                    if (e.data
+                        && e.data.records
+                        && e.data.records.length
+                        && e.data.records.includes($scope.record_id)
+                    ){ // it's for us, refresh grid!
+                        console.log("Got broadcast from channel eg.holdings.update for records " + e.data.records);
+                        $scope.holdings_record_id_changed($scope.record_id);
+                    }
+                }
+            };
+
+        } else if (holdings_bChannel){ // we're leaving holding tab, close bChannel
+            holdings_bChannel.close();
+        }
+    
+    });
+
     // refresh the list of holdings when the record_id is changed.
     $scope.holdings_record_id_changed = function(id) {
         if ($scope.record_id != id) $scope.record_id = id;
diff --git a/Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js b/Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
index 0928b7cadb..c7150a2523 100644
--- a/Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
+++ b/Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
@@ -1989,7 +1989,20 @@ function($scope , $q , $window , $routeParams , $location , $timeout , egCore ,
                             }
                         });
                     } else {
-                        $timeout(function(){$window.close()});
+                        $timeout(function(){
+                            if (typeof BroadcastChannel != 'undefined') {
+                                var bChannel = new BroadcastChannel("eg.holdings.update");
+                                var bre_ids = cnList && cnList.length > 0 ? cnList.map(function(cn){ return cn.record() }) : [];
+                                var cn_ids = cnList && cnList.length > 0 ? cnList.map(function(cn){ return cn.id() }) : [];
+                                bChannel.postMessage({
+                                    copies : copy_ids,
+                                    volumes: cn_ids,
+                                    records: bre_ids
+                                });
+                            }
+
+                            $window.close();
+                        });
                     }
                 }
             });
-- 
2.11.0