From 770a0f27af944f82dc840000466eae417aab6980 Mon Sep 17 00:00:00 2001 From: Rohit Bhati Date: Wed, 16 Jul 2025 17:51:26 +0530 Subject: [PATCH] Ensure that keyboard shortcuts are displayed in tooltips, context menus, and the main menu. #1923 --- docs/en_US/images/query_editing.png | Bin 34462 -> 35875 bytes .../servers/databases/casts/static/js/cast.js | 2 ++ .../event_triggers/static/js/event_trigger.js | 2 ++ .../extensions/static/js/extension.js | 2 ++ .../static/js/foreign_data_wrapper.js | 2 ++ .../databases/languages/static/js/language.js | 2 ++ .../publications/static/js/publication.js | 2 ++ .../schemas/collations/static/js/collation.js | 2 ++ .../static/js/domain_constraints.js | 2 ++ .../schemas/domains/static/js/domain.js | 2 ++ .../foreign_tables/static/js/foreign_table.js | 2 ++ .../static/js/fts_configuration.js | 2 ++ .../static/js/fts_dictionary.js | 2 ++ .../fts_parsers/static/js/fts_parser.js | 2 ++ .../fts_templates/static/js/fts_template.js | 2 ++ .../schemas/functions/static/js/function.js | 2 ++ .../schemas/functions/static/js/procedure.js | 2 ++ .../functions/static/js/trigger_function.js | 2 ++ .../schemas/sequences/static/js/sequence.js | 2 ++ .../databases/schemas/static/js/schema.js | 4 ++- .../tables/columns/static/js/column.js | 2 ++ .../schemas/tables/indexes/static/js/index.js | 2 ++ .../static/js/row_security_policy.js | 2 ++ .../schemas/tables/rules/static/js/rule.js | 2 ++ .../schemas/tables/static/js/table.js | 2 ++ .../tables/triggers/static/js/trigger.js | 2 ++ .../databases/schemas/types/static/js/type.js | 2 ++ .../schemas/views/static/js/mview.js | 2 ++ .../databases/schemas/views/static/js/view.js | 2 ++ .../servers/databases/static/js/database.js | 2 ++ .../subscriptions/static/js/subscription.js | 2 ++ .../servers/roles/static/js/role.js | 2 ++ .../server_groups/servers/static/js/server.js | 1 + .../tablespaces/static/js/tablespace.js | 2 ++ .../server_groups/static/js/server_group.js | 1 + .../browser/static/js/MainMenuFactory.js | 28 ++++++++++++++++++ web/pgadmin/browser/static/js/browser.js | 12 +++++++- web/pgadmin/browser/static/js/collection.js | 3 ++ web/pgadmin/browser/static/js/keyboard.js | 8 +++++ web/pgadmin/browser/static/js/node.js | 7 ++++- web/pgadmin/static/js/AppMenuBar.jsx | 1 + .../js/SchemaView/DataGridView/formHeader.jsx | 2 +- .../js/SchemaView/DataGridView/header.jsx | 2 +- .../static/js/components/ContextMenu.jsx | 1 + web/pgadmin/static/js/components/Menu.jsx | 24 +++++++++++++-- .../static/js/components/ShortcutTitle.jsx | 14 ++++----- web/pgadmin/static/js/helpers/Menu.js | 1 + .../tools/search_objects/static/js/index.js | 1 + .../sqleditor/static/js/SQLEditorModule.js | 4 ++- .../javascript/components/Menu.spec.js | 2 +- .../components/ShortcutTitle.spec.js | 2 +- 51 files changed, 162 insertions(+), 18 deletions(-) diff --git a/docs/en_US/images/query_editing.png b/docs/en_US/images/query_editing.png index e2e5199aadd75a8ab86fd5f6f2d26789934bfb98..0595eb1b9abfadae07b791df5bc04116da95d1c6 100644 GIT binary patch delta 35292 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 ServerGroupSchema(), diff --git a/web/pgadmin/browser/static/js/MainMenuFactory.js b/web/pgadmin/browser/static/js/MainMenuFactory.js index 54555809b..39d6ff0ba 100644 --- a/web/pgadmin/browser/static/js/MainMenuFactory.js +++ b/web/pgadmin/browser/static/js/MainMenuFactory.js @@ -12,6 +12,7 @@ import Menu, { MenuItem } from '../../../static/js/helpers/Menu'; import getApiInstance from '../../../static/js/api_instance'; import url_for from 'sources/url_for'; import withCheckPermission from './withCheckPermission'; +import usePreferences from '../../../preferences/static/js/store'; const MAIN_MENUS = [ { label: gettext('File'), name: 'file', id: 'mnu_file', index: 0, addSeprator: true, hasDynamicMenuItems: false }, @@ -97,6 +98,33 @@ export default class MainMenuFactory { }); } + static updateShortcutsFromPreferences(prefStore) { + const updateShortcuts = (item) => { + if (!item || typeof item !== 'object') return; + + Object.values(item).forEach((menuItem) => { + if (!menuItem || typeof menuItem !== 'object') return; + + if (menuItem?.shortcut_preference) { + const [module, key] = menuItem.shortcut_preference; + menuItem.shortcut = prefStore.getPreferences(module, key)?.value || null; + } + // Recurse only if it's a nested object. + if (!menuItem.name) { + updateShortcuts(menuItem); + } + }); + }; + let allMenus = pgAdmin.Browser?.all_menus_cache || {}; + Object.values(allMenus).forEach(updateShortcuts); + }; + + // Assign and Update menu shortcuts using preference. + static subscribeShortcutChanges() { + MainMenuFactory.updateShortcutsFromPreferences(usePreferences.getState()); + usePreferences.subscribe(MainMenuFactory.updateShortcutsFromPreferences); + } + static enableDisableMenus(item) { let itemData = item ? pgAdmin.Browser.tree.itemData(item) : undefined; diff --git a/web/pgadmin/browser/static/js/browser.js b/web/pgadmin/browser/static/js/browser.js index 438b35ef0..974426ccc 100644 --- a/web/pgadmin/browser/static/js/browser.js +++ b/web/pgadmin/browser/static/js/browser.js @@ -206,6 +206,14 @@ define('pgadmin.browser', [ uiloaded: function() { this.set_master_password(''); this.check_version_update(); + const prefStore = usePreferences.getState(); + let save_the_workspace = prefStore.getPreferencesForModule('misc').save_app_state; + if(save_the_workspace){ + this.restore_pgadmin_state(); + pgBrowser.docker.default_workspace.focus(); + } + // Assign and Update shortcuts from preferences. + MainMenuFactory.subscribeShortcutChanges(); }, check_corrupted_db_file: function() { getApiInstance().get( @@ -392,6 +400,8 @@ define('pgadmin.browser', [ below: _m.below, applies: _m.applies, permission: _m.permission, + shortcut_preference: _m.shortcut_preference, + shortcut:_m.shortcut }; }; @@ -406,7 +416,7 @@ define('pgadmin.browser', [ } _menus[m.name]['menu_items'] = sub_menu_items; } - } else { + } else { console.warn( 'Developer warning: Category \'' + a + diff --git a/web/pgadmin/browser/static/js/collection.js b/web/pgadmin/browser/static/js/collection.js index caff5c3a4..c67383e72 100644 --- a/web/pgadmin/browser/static/js/collection.js +++ b/web/pgadmin/browser/static/js/collection.js @@ -45,6 +45,7 @@ define([ name: 'refresh', node: this.type, module: this, applies: ['object', 'context'], callback: 'refresh', priority: 2, label: gettext('Refresh'), + shortcut_preference: ['browser', 'sub_menu_refresh'], }]); // show query tool only in context menu of supported nodes. @@ -55,6 +56,7 @@ define([ applies: ['context'], callback: 'show_query_tool', priority: 998, label: gettext('Query Tool'), permission: AllPermissionTypes.TOOLS_QUERY_TOOL, + shortcut_preference: ['browser', 'sub_menu_query_tool'], }]); // show search objects same as query tool @@ -63,6 +65,7 @@ define([ applies: ['context'], callback: 'show_search_objects', priority: 997, label: gettext('Search Objects...'), permission: AllPermissionTypes.TOOLS_SEARCH_OBJECTS, + shortcut_preference: ['browser', 'sub_menu_search_objects'], }]); // show psql tool same as query tool. diff --git a/web/pgadmin/browser/static/js/keyboard.js b/web/pgadmin/browser/static/js/keyboard.js index 28322f45b..85d229321 100644 --- a/web/pgadmin/browser/static/js/keyboard.js +++ b/web/pgadmin/browser/static/js/keyboard.js @@ -250,6 +250,14 @@ _.extend(pgBrowser.keyboardNavigation, { if (!tree.d){ return; } else if(node_obj.collection_node === true) { + const menuItems = pgAdmin.Browser.all_menus_cache.context?.[node_obj.type]; + // Filter all items with category 'create'. + const createMenuItems = Object.values(menuItems || {}).filter( + item => item.category === 'create' + ); + // If more than 1 create menu, ignore shortcut. + if(createMenuItems.length > 1) return; + if(node_obj.node) { node_obj = pgAdmin.Browser.Nodes[node_obj.node]; } else { diff --git a/web/pgadmin/browser/static/js/node.js b/web/pgadmin/browser/static/js/node.js index 50306eec2..afee2c046 100644 --- a/web/pgadmin/browser/static/js/node.js +++ b/web/pgadmin/browser/static/js/node.js @@ -113,7 +113,7 @@ define('pgadmin.browser.node', [ if (self.node_initialized) return; self.node_initialized = true; - + pgAdmin.Browser.add_menus([{ name: 'refresh', node: self.type, @@ -122,6 +122,7 @@ define('pgadmin.browser.node', [ callback: 'refresh', priority: 2, label: gettext('Refresh...'), + shortcut_preference: ['browser', 'sub_menu_refresh'], enable: true, }]); @@ -137,6 +138,7 @@ define('pgadmin.browser.node', [ data: { 'action': 'edit', }, + shortcut_preference: ['browser', 'sub_menu_properties'], enable: _.isFunction(self.canEdit) ? function() { return !!(self.canEdit(...arguments)); @@ -158,6 +160,7 @@ define('pgadmin.browser.node', [ 'url': 'drop', data_disabled: gettext('The selected tree node does not support this option.'), }, + shortcut_preference: ['browser', 'sub_menu_delete'], enable: _.isFunction(self.canDrop) ? function() { return !!(self.canDrop(...arguments)); @@ -205,6 +208,7 @@ define('pgadmin.browser.node', [ label: gettext('Query Tool'), enable: enable, permission: AllPermissionTypes.TOOLS_QUERY_TOOL, + shortcut_preference: ['browser', 'sub_menu_query_tool'], }]); // show search objects same as query tool @@ -214,6 +218,7 @@ define('pgadmin.browser.node', [ priority: 997, label: gettext('Search Objects...'), icon: 'fa fa-search', enable: enable, permission: AllPermissionTypes.TOOLS_SEARCH_OBJECTS, + shortcut_preference: ['browser', 'sub_menu_search_objects'], }]); if(pgAdmin['enable_psql']) { diff --git a/web/pgadmin/static/js/AppMenuBar.jsx b/web/pgadmin/static/js/AppMenuBar.jsx index 527d67495..71010d860 100644 --- a/web/pgadmin/static/js/AppMenuBar.jsx +++ b/web/pgadmin/static/js/AppMenuBar.jsx @@ -90,6 +90,7 @@ export default function AppMenuBar() { hasCheck={hasCheck} checked={menuItem.checked} closeOnCheck={true} + shortcut={menuItem.shortcut} >{menuItem.label}; }; diff --git a/web/pgadmin/static/js/SchemaView/DataGridView/formHeader.jsx b/web/pgadmin/static/js/SchemaView/DataGridView/formHeader.jsx index 666a8faf9..799b78f26 100644 --- a/web/pgadmin/static/js/SchemaView/DataGridView/formHeader.jsx +++ b/web/pgadmin/static/js/SchemaView/DataGridView/formHeader.jsx @@ -112,7 +112,7 @@ export function DataGridFormHeader({tableEleRef, rows}) { }, [canAddRow, rows?.length, addOnTop]); useEffect(() => { - if (newRowIndex.current < -1) return; + if (isNaN(newRowIndex.current) || newRowIndex.current <= -1) return; virtualizer.scrollToIndex(newRowIndex.current); diff --git a/web/pgadmin/static/js/SchemaView/DataGridView/header.jsx b/web/pgadmin/static/js/SchemaView/DataGridView/header.jsx index 4a11fbb40..3c2c55d10 100644 --- a/web/pgadmin/static/js/SchemaView/DataGridView/header.jsx +++ b/web/pgadmin/static/js/SchemaView/DataGridView/header.jsx @@ -56,7 +56,7 @@ export function DataGridHeader({tableEleRef}) { }, [canAddRow, rows?.length]); useEffect(() => { - if (newRowIndex.current < -1) return; + if (isNaN(newRowIndex.current) || newRowIndex.current <= -1) return; virtualizer.scrollToIndex(newRowIndex.current); diff --git a/web/pgadmin/static/js/components/ContextMenu.jsx b/web/pgadmin/static/js/components/ContextMenu.jsx index 2a540188a..19535c5d6 100644 --- a/web/pgadmin/static/js/components/ContextMenu.jsx +++ b/web/pgadmin/static/js/components/ContextMenu.jsx @@ -27,6 +27,7 @@ export default function ContextMenu({menuItems, position, onClose, label='contex }} hasCheck={hasCheck} checked={menuItem.checked} + shortcut={menuItem.shortcut} >{menuItem.label}; }; diff --git a/web/pgadmin/static/js/components/Menu.jsx b/web/pgadmin/static/js/components/Menu.jsx index 1a0f1c329..b92da4965 100644 --- a/web/pgadmin/static/js/components/Menu.jsx +++ b/web/pgadmin/static/js/components/Menu.jsx @@ -20,6 +20,7 @@ import { export {MenuDivider as PgMenuDivider} from '@szhsin/react-menu'; import { shortcutToString } from './ShortcutTitle'; import CustomPropTypes from '../custom_prop_types'; +import { Box } from '@mui/material'; export function PgMenu({open, className='', label, menuButton=null, ...props}) { const state = open ? 'open' : 'closed'; @@ -81,9 +82,26 @@ export const PgMenuItem = (({hasCheck=false, checked=false, accesskey, shortcut, return {hasCheck && } {children} -
- {keyVal ? `(${keyVal})` : ''} -
+ + {Array.isArray(keyVal) + ? keyVal.map((key, idx) => ( + {key} + )) + : {keyVal ? `${keyVal}` : ''} + } +
; }); diff --git a/web/pgadmin/static/js/components/ShortcutTitle.jsx b/web/pgadmin/static/js/components/ShortcutTitle.jsx index bb4fa9bbe..209370b2c 100644 --- a/web/pgadmin/static/js/components/ShortcutTitle.jsx +++ b/web/pgadmin/static/js/components/ShortcutTitle.jsx @@ -59,19 +59,19 @@ export function shortcutToString(shortcut, accesskey=null, asArray=false) { keys = getBrowserAccesskey(); keys.push(_.capitalize(accesskey?.toUpperCase())); } else if(shortcut) { - shortcut.alt && keys.push((isMac() ? 'Option' : 'Alt')); + if(shortcut.alt) keys.push(isMac() ? '⌥' : 'Alt'); if(isMac() && shortcut.ctrl_is_meta) { - shortcut.control && keys.push('Cmd'); + if(shortcut.control) keys.push('⌘'); } else { - shortcut.control && keys.push('Ctrl'); + if(shortcut.control) keys.push(isMac() ? '⌃' : 'Ctrl'); } - shortcut.shift && keys.push('Shift'); + if(shortcut.shift) keys.push(isMac() ? '⇧' : 'Shift'); keys.push(_.capitalize(shortcut.key.char)); } else { return ''; } - return asArray ? keys : keys.join(' + '); + return asArray || isMac() ? keys : keys.join(' + '); } /* The tooltip content to show shortcut details */ @@ -82,8 +82,8 @@ export default function ShortcutTitle({title, shortcut, accesskey}) { (
{title}
- {keys.map((key)=>{ - return
{key}
; + {keys.map((key, idx)=>{ + return
{key}
; })}
) diff --git a/web/pgadmin/static/js/helpers/Menu.js b/web/pgadmin/static/js/helpers/Menu.js index 6c7cd2566..2881fb25e 100644 --- a/web/pgadmin/static/js/helpers/Menu.js +++ b/web/pgadmin/static/js/helpers/Menu.js @@ -124,6 +124,7 @@ export class MenuItem { 'checked', 'below', 'menu_items', 'is_checkbox', 'action', 'applies', 'is_native_only', 'type', 'permission', ]; + this.shortcut = options.shortcut; let defaults = { url: '#', target: '_self', diff --git a/web/pgadmin/tools/search_objects/static/js/index.js b/web/pgadmin/tools/search_objects/static/js/index.js index 231acdd25..feb524567 100644 --- a/web/pgadmin/tools/search_objects/static/js/index.js +++ b/web/pgadmin/tools/search_objects/static/js/index.js @@ -48,6 +48,7 @@ export default class SearchObjectModule { data_disabled: gettext('Please select a database from the object explorer to search the database objects.'), }, permission: 'tools_search_objects', + shortcut_preference: ['browser', 'sub_menu_search_objects'], }]; pgBrowser.add_menus(menus); diff --git a/web/pgadmin/tools/sqleditor/static/js/SQLEditorModule.js b/web/pgadmin/tools/sqleditor/static/js/SQLEditorModule.js index 01a27b95c..7fc9acd70 100644 --- a/web/pgadmin/tools/sqleditor/static/js/SQLEditorModule.js +++ b/web/pgadmin/tools/sqleditor/static/js/SQLEditorModule.js @@ -107,6 +107,7 @@ export default class SQLEditor { data_disabled: gettext('Please select a database from the object explorer to access Query Tool.'), }, permission: AllPermissionTypes.TOOLS_QUERY_TOOL, + shortcut_preference: ['browser', 'sub_menu_query_tool'], }]; // Create context menu @@ -125,7 +126,8 @@ export default class SQLEditor { priority: 101, label: gettext('All Rows'), permission: AllPermissionTypes.TOOLS_QUERY_TOOL, - },{ + shortcut_preference: ['browser', 'sub_menu_view_data'], + }, { name: 'view_first_100_rows_context_' + supportedNode, node: supportedNode, module: this, diff --git a/web/regression/javascript/components/Menu.spec.js b/web/regression/javascript/components/Menu.spec.js index d50876365..9aa473013 100644 --- a/web/regression/javascript/components/Menu.spec.js +++ b/web/regression/javascript/components/Menu.spec.js @@ -82,7 +82,7 @@ describe('Menu', ()=>{ } }); const menuItem = screen.getByRole('menuitem'); - expect(menuItem.textContent).toBe('Test(Ctrl + Shift + K)'); + expect(menuItem.textContent).toBe('Test Ctrl + Shift + K'); }); it('not checked', ()=>{ diff --git a/web/regression/javascript/components/ShortcutTitle.spec.js b/web/regression/javascript/components/ShortcutTitle.spec.js index 729baa5cd..e897ee06f 100644 --- a/web/regression/javascript/components/ShortcutTitle.spec.js +++ b/web/regression/javascript/components/ShortcutTitle.spec.js @@ -59,7 +59,7 @@ describe('ShortcutTitle', ()=>{ it('mac meta key', ()=>{ shortcut.ctrl_is_meta = true; jest.spyOn(keyShort, 'isMac').mockReturnValue(true); - expect(shortcutToString(shortcut)).toBe('Cmd + Shift + K'); + expect(shortcutToString(shortcut)).toEqual(['⌘', '⇧', 'K']); }); }); });