Hi,

PFA patch to fix the issue where user hides the any node from Preference
dialog but the menu(both context/object) still appears in pgAdmin4.
RM#2225

--
Regards,
Murtuza Zabuawala
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
diff --git a/web/pgadmin/browser/templates/browser/js/browser.js 
b/web/pgadmin/browser/templates/browser/js/browser.js
index a663ae8..d9a94f7 100644
--- a/web/pgadmin/browser/templates/browser/js/browser.js
+++ b/web/pgadmin/browser/templates/browser/js/browser.js
@@ -593,17 +593,77 @@ function(require, $, _, S, Bootstrap, pgAdmin, Alertify, 
CodeMirror) {
         single: single
       }
     },
+
+    // This will hold preference data (Works as a cache object)
+    // Here node will be a key and it's preference data will be value
+    node_preference_data: {},
+
+    // To check if node is visible in browser tree or not
+    is_node_visible: function(node_type) {
+      if(_.isUndefined(node_type) || _.isNull(node_type)) {
+        return true;
+      }
+
+      // Target actual node instead of collection.
+      // If node is disabled then there is no meaning of
+      // adding collection node menu
+      if(S.startsWith(node_type, "coll-")) {
+        node_type = node_type.replace("coll-", "")
+      }
+
+      // Exclude non-applicable nodes
+      var nodes_not_supported = [
+        "server-group", "server", "catalog_object_column"
+      ];
+      if(_.indexOf(nodes_not_supported, node_type) >= 0) {
+        return true;
+      }
+
+      var perf;
+      // If we have already fetched preference earlier then pick
+      // it from our cache object
+      if (_.has(this.node_preference_data, node_type)) {
+        return this.node_preference_data[node_type].value
+      }
+
+      perf = this.get_preference(
+        'browser', 'show_node_' + node_type
+      );
+
+      // Save it for future use, kind of caching
+      if(!_.isUndefined(perf) && !_.isNull(perf)) {
+        this.node_preference_data[node_type] = perf;
+        return perf.value;
+      } else {
+        return true;
+      }
+    },
+
     // Add menus of module/extension at appropriate menu
     add_menus: function(menus) {
-      var pgMenu = this.menus;
-      var MenuItem = pgAdmin.Browser.MenuItem;
+      var self = this,
+        pgMenu = this.menus,
+        MenuItem = pgAdmin.Browser.MenuItem;
       _.each(menus, function(m) {
         _.each(m.applies, function(a) {
           /* We do support menu type only from this list */
           if ($.inArray(a, [
-              'context', 'file', 'edit', 'object',
-              'management', 'tools', 'help']) >= 0) {
+                'context', 'file', 'edit', 'object',
+                'management', 'tools', 'help']) >= 0) {
             var menus;
+
+            // If current node is not visible in browser tree
+            // then return from here
+            if(!self.is_node_visible(m.node)) {
+                return;
+            } else if(_.has(m, 'module') && !_.isUndefined(m.module)) {
+              // If module to which this menu applies is not visible in
+              // browser tree then also we do not display menu
+              if(!self.is_node_visible(m.module.type)) {
+                return;
+              }
+            }
+
             pgMenu[a] = pgMenu[a] || {};
             if (_.isString(m.node)) {
               menus = pgMenu[a][m.node] = pgMenu[a][m.node] || {};
-- 
Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers

Reply via email to