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 ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers