Display the 'No menu available for this object' message if the selected tree node does not have any options. #5775

This commit is contained in:
Anil Sahoo 2023-03-02 11:02:15 +05:30 committed by GitHub
parent ff3555cf1d
commit 5abb748c3e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 97 additions and 71 deletions

View File

@ -113,4 +113,16 @@ export default class MainMenuFactory {
Menu.sortMenus(menuList); Menu.sortMenus(menuList);
return menuList; return menuList;
} }
}
static checkNoMenuOptionForNode(d){
let selectedNodeFromNodes=pgAdmin.Browser.Nodes[d._type];
let selectedNode=pgAdmin.Browser.tree.selected();
let flag=!_.isUndefined(selectedNodeFromNodes.showMenu);
if(flag){
var showMenu = selectedNodeFromNodes.showMenu(d, selectedNode);
return {flag:showMenu?false:flag,showMenu};
} else{
return {flag,showMenu:undefined};
}
}
}

View File

@ -378,77 +378,91 @@ define('pgadmin.browser', [
masterpass_callback_queue: [], masterpass_callback_queue: [],
getMenuList: function(name, item, d, skipDisabled=false) { getMenuList: function(name, item, d, skipDisabled=false) {
let obj = this; let obj = this;
let category = { //This 'checkNoMenuOptionForNode' function will check if showMenu flag is present or not for selected node
'common': [] let {flag,showMenu}=MainMenuFactory.checkNoMenuOptionForNode(d);
}; if(flag){
const nodeTypeMenus = obj.all_menus_cache[name][d._type]; if(showMenu===false){
for(let key of Object.keys(nodeTypeMenus)) { return [MainMenuFactory.createMenuItem({
let menuItem = nodeTypeMenus[key]; enable : false,
let menuCategory = menuItem.category ?? 'common'; label: gettext('No menu available for this object.'),
category[menuCategory] = category[menuCategory] ?? []; name:'',
category[menuCategory].push(menuItem); priority: 1,
} category: 'create',
let menuItemList = []; })];
for(let c in category) {
if((c in obj.menu_categories || category[c].length > 1) && c != 'common' ) {
let allMenuItemsDisabled = true;
category[c].forEach((mi)=> {
mi.checkAndSetDisabled(d, item);
if(allMenuItemsDisabled) {
allMenuItemsDisabled = mi.isDisabled;
}
});
const categoryMenuOptions = obj.menu_categories[c];
let label = categoryMenuOptions?.label ?? c;
let priority = categoryMenuOptions?.priority ?? 10;
if(categoryMenuOptions?.above) {
menuItemList.push(MainMenuFactory.getSeparator(label, priority));
}
if(!allMenuItemsDisabled && skipDisabled) {
let _menuItem = MainMenuFactory.createMenuItem({
name: c,
label: label,
module: c,
category: c,
menu_items: category[c],
priority: priority
});
menuItemList.push(_menuItem);
} else if(!skipDisabled){
let _menuItem = MainMenuFactory.createMenuItem({
name: c,
label: label,
module:c,
category: c,
menu_items: category[c],
priority: priority
});
menuItemList.push(_menuItem);
}
if(categoryMenuOptions?.below) {
menuItemList.push(MainMenuFactory.getSeparator(label, priority));
}
} else {
category[c].forEach((c)=> {
c.checkAndSetDisabled(d, item);
});
category[c].forEach((m)=> {
if(!skipDisabled) {
menuItemList.push(m);
} else if(skipDisabled && !m.isDisabled){
menuItemList.push(m);
}
});
} }
} }else{
let category = {
'common': []
};
const nodeTypeMenus = obj.all_menus_cache[name][d._type];
for(let key of Object.keys(nodeTypeMenus)) {
let menuItem = nodeTypeMenus[key];
let menuCategory = menuItem.category ?? 'common';
category[menuCategory] = category[menuCategory] ?? [];
category[menuCategory].push(menuItem);
}
let menuItemList = [];
return menuItemList; for(let c in category) {
if((c in obj.menu_categories || category[c].length > 1) && c != 'common' ) {
let allMenuItemsDisabled = true;
category[c].forEach((mi)=> {
mi.checkAndSetDisabled(d, item);
if(allMenuItemsDisabled) {
allMenuItemsDisabled = mi.isDisabled;
}
});
const categoryMenuOptions = obj.menu_categories[c];
let label = categoryMenuOptions?.label ?? c;
let priority = categoryMenuOptions?.priority ?? 10;
if(categoryMenuOptions?.above) {
menuItemList.push(MainMenuFactory.getSeparator(label, priority));
}
if(!allMenuItemsDisabled && skipDisabled) {
let _menuItem = MainMenuFactory.createMenuItem({
name: c,
label: label,
module: c,
category: c,
menu_items: category[c],
priority: priority
});
menuItemList.push(_menuItem);
} else if(!skipDisabled){
let _menuItem = MainMenuFactory.createMenuItem({
name: c,
label: label,
module:c,
category: c,
menu_items: category[c],
priority: priority
});
menuItemList.push(_menuItem);
}
if(categoryMenuOptions?.below) {
menuItemList.push(MainMenuFactory.getSeparator(label, priority));
}
} else {
category[c].forEach((c)=> {
c.checkAndSetDisabled(d, item);
});
category[c].forEach((m)=> {
if(!skipDisabled) {
menuItemList.push(m);
} else if(skipDisabled && !m.isDisabled){
menuItemList.push(m);
}
});
}
}
return menuItemList;
}
}, },
// Enable/disable menu options // Enable/disable menu options
enable_disable_menus: function(item) { enable_disable_menus: function(item) {

View File

@ -108,7 +108,7 @@ function BrowserTree(props) {
return <PgMenuDivider key={i}/>; return <PgMenuDivider key={i}/>;
} }
if(menuItem.isDisabled) { if(menuItem.isDisabled) {
return <React.Fragment key={i}></React.Fragment>; return <React.Fragment key={i}><div style={{padding: '0 0.7rem',opacity: '0.5'}}>{menuItem.label}</div></React.Fragment>;
} }
const hasCheck = typeof menuItem.checked == 'boolean'; const hasCheck = typeof menuItem.checked == 'boolean';